有些老读者会发现,五天前我的网站提示https不安全,而三天前我的网站直接无法访问了。这是由于之前搭建网站用的一键面板内存占用率太高,总是卡顿,我打算不用一键面板而自己手动搭建。结果在申请ssl证书时候,误操作了几次,达到了Let’s encrypt每周最多申请五个证书的上限。现在网站复活了,记录一下建站的过程吧。

本文参考:极限建站,基本内容和它一样,只是加入了debain9安装php7.3的方法。

首先,说说建站需要准备什么:

  • 一个域名(可以不要,直接输入ip来访问网站,不推荐)
  • 一个tls,本文以cloudflare为例,用于加速访问/保护网站。
  • 一个公网ip(没有的话可以动态域名解析、内网穿透,不在本文讨论范围中)
  • 一台vps(本文只讨论debain 9系统)

然后,再说说基本思路。搭建一个简单的动态网站,需要以下内容:

  • 一台服务器(Linux系统)
  • 网站服务,一般用三个下面中的一个:
    • apache——读作“阿帕奇”
    • nginx——读作“引擎X”
    • caddy——读作“凯蒂”(这个好使,选他!)
  • 一个数据库(mysql)
  • php解释语言。
  • 网站主体部分,本文以wordpress为例。
  • 如果需要其他服务,自行搭建即可。

本文主要讲解使用LCMP(linux+caddy+mysql+php)方式搭建网站,因为caddy能够自动申请ssl证书并自动续签,很方便。服务器租赁,域名购买,cloudfare注册配置,域名解析这些部分都很简单,随便搜索一下就有,这里不再赘述。

L——>debian 9

服务器的系统,我们选择debian 9。

Debian/ˈdɛbiən/[)是完全由自由软件组成的类UNIX操作系统,其包含的多数软件使用GNU通用公共许可协议授权,并由Debian计划的参与者组成团队对其进行打包、开发与维护。 作为最早的Linux发行版之一,Debian在创建之初便被定位为在GNU计划的精神指导下进行公开开发并自由发布的项目。

——摘自维基百科

至于原因,不是因为这些“使用debian的理由”,而是因为我懒。本文参考文献中使用的是debian 10,而我升级debian 10服务器会挂,因此就退而求其次选择debian 9。废话不多说,上命令。

apt update && apt upgrade -y #升级系统软件包

#下面的命令用于开启bbr
modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

C——> caddy

Caddy服务器(或称Caddy Web)是一个开源的,使用 Golang 编写,支持 HTTP/2 的 Web 服务端。它使用 Golang 标准库提供 HTTP 功能。Caddy 一个显著的特性是默认启用 HTTPS。它是第一个无需额外配置即可提供 HTTPS 特性的 Web 服务器。


——摘自维基百科。

安装caddy,如果不使用cloudflare可以不安这个插件,去掉下面命令的这个参数即可。

apt install curl -y
curl https://getcaddy.com | bash -s personal tls.dns.cloudflare

创建caddy用户,创建存放证书的目录,创建caddy配置文件的目录,修改权限。

chown root:root /usr/local/bin/caddy
chmod 755 /usr/local/bin/caddy
groupadd caddy
useradd -g caddy --home-dir /var/www --no-create-home --shell /usr/sbin/nologin --system caddy
mkdir /etc/caddy
touch /etc/caddy/Caddyfile
chown -R root:caddy /etc/caddy
chown caddy:caddy /etc/caddy/Caddyfile
chmod 444 /etc/caddy/Caddyfile
mkdir /etc/ssl/caddy
chown -R caddy:root /etc/ssl/caddy
chmod 770 /etc/ssl/caddy
mkdir /var/www
chown caddy:caddy /var/www

创建配置文件(自行替换黑体字):

vim /etc/caddy/Caddyfile

example.com {
tls admin@example.com
root /var/www/wordpress
gzip
fastcgi / /run/php/php7.3-fpm.sock php
rewrite {
if {path} not_match ^\/wp-admin
to {path} {path}/ /index.php?_url={uri}
}
}

创建systemd服务(自行替换黑体字,删除注释):

[Unit]
Description=Caddy HTTP/2 web server
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
[Service]
Restart=on-failure
StartLimitInterval=864000
StartLimitBurst=500
; User and group the process will run as.
User=caddy
Group=caddy
; Letsencrypt-issued certificates will be written to this directory.
Environment=CADDYPATH=/etc/ssl/caddy
Environment=CLOUDFLARE_API_KEY=这里改为你的API Key,在这个页面点击Global API Key--->View API Key即可看到https://www.cloudflare.com/a/profile
Environment=CLOUDFLARE_EMAIL=这里改为你cloudfalre的邮箱
; Always set "-root" to something safe in case it gets forgotten in the Caddyfile.
ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID
; Limit the number of file descriptors; see man systemd.exec for more limit settings.
LimitNOFILE=1048576
; Unmodified caddy is not expected to use more than that.
LimitNPROC=64
; Use private /tmp and /var/tmp, which are discarded after caddy stops.
PrivateTmp=true
; Use a minimal /dev
PrivateDevices=true
; Hide /home, /root, and /run/user. Nobody will steal your SSH-keys.
ProtectHome=true
; Make /usr, /boot, /etc and possibly some more folders read-only.
ProtectSystem=full
; … except /etc/ssl/caddy, because we want Letsencrypt-certificates there.
; This merely retains r/w access rights, it does not add any new. Must still be writable on the host!
ReadWriteDirectories=/etc/ssl/caddy
; The following additional security directives only work with systemd v229 or later.
; They further restrict privileges that can be gained by Caddy. Uncomment if you like.
; Note that you may have to add capabilities required by any plugins in use.
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
;NoNewPrivileges=true
[Install]
WantedBy=multi-user.target

caddy到这里就配置好了。下面启动caddy服务试试。

systemctl enable caddy
systemctl start caddy
systemctl enable caddy

自行查看提示,如果不成功请自行检查配置文件并重试:

systemctl restart caddy
systemctl enable caddy

M——>MariaDB (MySQL的开源分支)

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。


——摘自维基百科

按照下面内容进行安装,注意修改黑体字内容。

apt install mysql-server -y
mysql_secure_installation
mysql -u root -p
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
EXIT;

P——>php7.3

PHP(全称:PHP:Hypertext Preprocessor,即“PHP:超文本预处理器”)是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。PHP的语法借鉴吸收C语言JavaPerl等流行计算机语言的特点,易于一般程序员学习。PHP的主要目标是允许网络开发人员快速编写动态页面,但PHP也被用于其他很多领域。


——摘自维基百科

debain9想要安装php7.3,需要先添加软件源:

apt install ca-certificates apt-transport-https -y
wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
apt update
apt install php7.3-fpm -y
apt install php7.3 php7.3-mysql php7.3-gd php7.3-xml php7.3-cgi php7.3-cli php7.3-curl php7.3-zip php7.3-mbstring unzip -y

安装完成后需要修改一个配置文件,把里面的www-data改成caddy。

nano /etc/php/7.3/fpm/pool.d/www.conf
systemctl enable php7.3-fpm
systemctl start php7.3-fpm
systemctl status php7.3-fpm

WordPress

至此,lcmp环境就搭建成功了。现在需要部署网站的主体部分。还是自己替换黑体字:

mkdir /var/www/wordpress 
cd /var/www/wordpress
wget https://wordpress.org/latest.tar.gz
tar xvf latest.tar.gz
mv wordpress/* .
rm wordpress/ -rf
chown caddy:caddy /var/www/wordpress

现在,使用浏览器访问你的网站,按提示输入之前建立的数据库名密码,恭喜你建站成功。之后可以自己在浏览器里面修改网站的主题、页面等等。

2 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *