1. 准备工作
首先为了能够让任何地方任何人都可以访问,我们需要一个公网IP
,同时还需要一个域名,如果为了数据的安全性,我们还要准备一个SSL
证书。
1.1 准备一台云服务器
我们作为普通人,基本上很难拥有个人的公网IP
,网上普遍认为如果你是电信网络,那么可以向电信运营商申请一个公网IP
,如果你是移动网络,那基本上不可能申请到公网IP
。当然我们普通人申请公网,一般也不会给,所以我们选择一台云服务器,就比较方便了,公网IP
有云服务器提供。基本上很多中小型创业公司,都会选择云服务器,因为实在是太方便了,想啥是时候不用,直接销毁服务器即可,还不用考虑硬件损坏问题。
市场上云服务器供应商有很多,那么我们要如何根据自己的经费情况,选择合适的云服务器呢?我们知道国内有几个大厂,也提供云服务器,比如阿里云,腾讯云,但我们也知道大厂提供的云服务器都特别贵,如果你是学生还好,比较便宜,但是如果你是一个社会人事,是一位个人站长,那么还是推荐莱卡云,可选的服务器种类丰富多样,你可以选国内大陆地区的,也可以选择中国香港的,如果你要用海外的服务器,你甚至也可以选。如果有需要可以点击这里跳转到莱卡云,进行注册,并选择自己的一台云服务器。并且莱卡云的云服务器是比较实惠的,价格比较厚道。不同地区,不同配置,价格不同,如下所示。当然下面只是截图了一部分,还有更多云服务器,可以点击这里跳转到莱卡云官网。
| 地区 | 配置 | 费用 |
| ———————————————————— | ———————————————————— | —– |
| 浙江电信云 | 2核,4GB内存,50GB空间,1个IPv4,1个月 | 38¥ |
| 浙江电信云 | 2核,4GB内存,50GB空间,1个IPv4,1年 | 380¥ |
| 中国香港CN2 | 1核,1GB内存,30GB空间,1个IPv4,1年 | 420¥ |
| 美国CN2 | 2核,1GB内存,30GB空间,1个IPv4,1年 | 385¥ |
| 美国CN2大带宽 | 2核,1GB内存,30GB空间,1个IPv4,峰值带宽20MB(你可以选择更大的带宽),1年 | 418¥ |
| 还有更多选择,可以访问莱卡云 | | |
我这里选择的是一台浙江宁波的云服务器,配置情况如下所示。
| 服务器 | CPU | 运行内存 | 存储空间 |
| ——————————————— | —– | ——– | ——– |
| 莱卡云 | 4核心 | 6GB | 100GB |
1.2 准备一个域名
准备好了自己的云服务器外,我们还要有自己的域名,总不能让用户,直接输入IP
进行访问吧,并且IP
也不好记忆,所以我们还需要准备一个域名。
域名的选择也十分丰富,这里为了节省开支,我选择了top
域名,如果你还没有域名,可以到namesilo
中租一个域名,点击这里跳转到namesilo
官网。如果你在莱卡云中选择的是国内的云服务器,那么你还需要备案,然后进行域名解析之后,在添加到莱卡云的白名单域名中,如果是国外地区,那么就不需要备案。
1.3 准备一个SSL证书
有了云服务器和域名,我们现在可以通过域名来访问自己搭建好的网站了,但是你可能会注意到浏览器会提示不安全,因为你现在是通过http
访问的,是不安全的,数据流量有可能被黑客篡改,于是你就需要怎么确保数据安全性呢?这就需要一个SSL
证书,证书可以保证数据在网络中传输的完整性。
市面上提供证书的厂商也有很多,如果你舍得花钱,可以租一个证书,但是你作为个人站长,你又不想花钱,怎么办呢?你可以使用acme.sh
为自己的域名颁发一个SSL
证书。于是你的SSL
证书就有了,省下来的钱,你可以到莱卡云中租更好的云服务器了。
2. 安装Nginx
全部工作准备好后,你就可以开始安装软件了,先开始安装Nginx
。
首先我们通过shell
工具连接到你的莱卡云云服务器,然后执行下面命令更新系统一些安装的软件。
apt-get update # 只更新系统软件列表
apt-get upgrade # 根据软件列表,更新软件
更新好后,执行下面命令,拉取nginx
源码到你的云服务器,并且解压,然后进入到源码内。
wget https://nginx.org/download/nginx-1.26.2.tar.gz
tar -zxvf nginx-1.26.2.tar.gz
cd nginx-1.26.2
安装之前,我们需要先安装系统依赖。
apt-get install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev openssl libssl-dev libxslt-dev libxml2-dev libnghttp2-dev libbrotli-dev libluajit-5.1-dev
执行配置
./configure --prefix=/usr/local/nginx/ --with-http_ssl_module --with-stream --with-threads --with-file-aio --with-poll_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_slice_module
编译安装
make -j 4 && make install
交给系统管理
创建一个文件,并且写入下面内容
apt-get install -y vim
vim /etc/systemd/system/nginx.service
```shell
[Unit]
Description=Nginx web server
After=network.target
[Service]
Type=forking
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
然后我们就可以通过systemctl
命令来启动,重载配置,停止nginx
了。
# 启动
systemctl start nginx
# 重载
systemctl reload nginx
# 停止
systemctl stop nginx
# 查看状态
systemctl status nginx
# 设置开机自启
systemctl enable nginx
注意:启动后,我们需要开放防火墙80
端口,并且在启用防火墙之前,一定要记得,先开放22
号端口,否则会导致SSH
无法连接。
apt-get install -y ufw
ufw allow 22/tcp
ufw allow 80/tcp
ufw enable
3. 安装MySQL
3.1 源码编译安装MySQL5
作为一个网站,我们的数据肯定需要存储,那么通常中小型网站我们都会选择开源免费的数据库,这里选择最多的是MySQL
,那么下面将会讲如何安装MySQL
。
安装依赖
apt install -y build-essential cmake bison libncurses5-dev libssl-dev
下载源码
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.35.tar.gz
解压源码
useradd -s /sbin/nologin mysql
mkdir -p /usr/local/mysql
mkdir -p /data/mysql/data
chown -R mysql:mysql /data/mysql
chown -R mysql:mysql /usr/local/mysql
tar -zxvf mysql-5.7.35.tar.gz -C /usr/local/mysql/
进入源码
cd /usr/local/mysql/mysql-5.7.35
执行配置
cmake -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_BOOST=boost -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/mysql/mysql-5.7.35
当你执行上面命令时,你会看到下面的报错信息
Cannot find appropriate system libraries for WITH_SSL=system.
Make sure you have specified a supported SSL version.
这个是MySQL
的一个bug
,准确来说是cmake/ssl.cmake
文件的一个bug
,可以在# If we are invoked with
下面添加下面的语句
SET(OPENSSL_INCLUDE_DIR "/usr/include/openssl")
SET(OPENSSL_LIBRARY "/lib/x86_64-linux-gnu/libssl.a")
SET(CRYPTO_LIBRARY "/lib/x86_64-linux-gnu/libcrypto.a")
SET(OPENSSL_VERSION "1.1.1")
SET(OPENSSL_MAJOR_VERSION "1")
SET(OPENSSL_MINOR_VERSION "1")
SET(OPENSSL_FIX_VERSION "1")
SET(OPENSSL_FOUND TRUE)
SET(WITH_SSL_PATH TRUE)
编译安装
make -j 4 && make install
编辑配置文件
vim /etc/my.cnf
```shell
[client]
port = 3306
socket = /usr/local/mysql/mysql.sock
[mysqld]
character-set-server=utf8mb4
basedir = /usr/local/mysql
datadir = /data/mysql/data
pid-file = /data/mysql/mysql.pid
socket = /usr/local/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
log_error = /data/mysql/mysql-error.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql-slow.log
skip-external-locking
key_buffer_size = 32M
max_allowed_packet = 1024M
table_open_cache = 128
sort_buffer_size = 768K
net_buffer_length = 8K
read_buffer_size = 768K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 16
query_cache_size = 16M
tmp_table_size = 32M
performance_schema_max_table_instances = 1000
explicit_defaults_for_timestamp = true
skip-networking
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535
log_bin=mysql-bin
binlog_format=mixed
server_id = 232
expire_logs_days = 10
early-plugin-load = ""
default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M
给配置文件指定用户和用户组
chown mysql:mysql /etc/my.cnf
初始化数据库
./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
对初始化参数的说明
--initialize-insecure 表示初始化的时候不生成默认密码
--initialize 表示初始化的时候生成默认密码,默认密码保存到log-error里,查询temporary password
--basedir 指定mysql安装路径,需要与my.cnf配置中的路径一致
--datadir 指定存储mysql数据路径,需要与my.cnf配置中的路径一致
交给系统管理
vim /etc/systemd/system/mysql.service
```shell
[Unit]
Description=MySQL Community Server
After=network.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecStop=/usr/local/mysql/bin/mysqladmin shutdown
LimitNOFILE=5000
TimeoutSec=300
[Install]
WantedBy=multi-user.target
启动MySQL
服务
systemctl start mysql
systemctl enable mysql
配置系统环境变量
vim /etc/profile
PATH=/usr/local/mysql/bin:$PATH
source /etc/profile
连接到MySQL
,并且给MySQL
设置密码
mysql -uroot -p
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;
3.2 源码编译安装MySQL8
安装系统依赖
apt install -y wget build-essential cmake libssl-dev libncurses5-dev pkg-config bison libudev-dev libsasl2-dev libldap2-dev
下载源码
wget -c https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-8.2.0.tar.gz
解压
tar -zxvf ./mysql-boost-8.2.0.tar.gz
切换路径
cd mysql-8.2.0
创建一个build
目录,用于存储cmake
的结果文件
mkdir build
cd build
使用下面命令执行cmake
cmake ../ -DCMAKE_INSTALL_PREFIX=/opt/mysql -DMYSQL_DATADIR=/opt/mysql/data -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../boost -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DSYSCONFDIR=/etc -DMYSQL_TCP_PORT=3306 -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_SSL=system
编译安装
make -j 4 && make install
创建下面几个目录
mkdir /opt/mysql/tmp
mkdir /opt/mysql/data
mkdir /var/run/mysqld/
创建配置文件
vim /etc/my.cnf
写入下面内容
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
bind-address = 0.0.0.0
user = root
port = 3306
basedir = /opt/mysql
datadir = /opt/mysql/data
tmpdir = /opt/mysql/tmp
pid-file = /var/run/mysqld.pid
log-error = /opt/mysql/tmp/error.log
socket = /tmp/mysql.sock
default-storage-engine = innodb
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
初始化数据库
/opt/mysql/bin/mysqld --initialize-insecure
注册为系统服务
cp /opt/mysql/support-files/mysql.server /etc/init.d/mysql
cp /opt/mysql/bin/mysqld /etc/init.d/
chmod +x /etc/init.d/mysql
启动服务及查看状态
/etc/init.d/mysql start
/etc/init.d/mysql status
/etc/init.d/mysql stop
update-rc.d mysql defaults # 配置开机自启
service mysql start
创建软链接,方便在任何路径下可以登录MySQL
ln -s /opt/mysql/bin/mysql /usr/local/bin/mysql
修改数据库密码
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
flush privileges;
设置允许远程连接
use mysql;
update user set host = '%' where user ='root';
flush privileges;
4. 安装PHP
下载源码
wget https://www.php.net/distributions/php-8.3.8.tar.gz
解压并进入源码
tar -zxf php-8.3.8.tar.gz && cd ./php-8.3.8
安装系统依赖
apt install -y make gcc g++ libxml2 libxml2-dev libkrb5-dev openssl libssl-dev libsqlite3-dev zlib1g-dev libbz2-dev libcurl4-openssl-dev libpng-dev libjpeg-dev libonig-dev libxslt1-dev libzip-dev libfreetype6-dev
创建专用用户
adduser --system --group --no-create-home php83
创建目录
mkdir -p /usr/local/php83/etc/php.d/
执行配置
./configure \
--prefix=/usr/local/php83/ \
--with-config-file-path=/usr/local/php83/etc/ \
--with-config-file-scan-dir=/usr/local/php83/etc/php.d/ \
--with-fpm-user=php83 \
--with-fpm-group=php83 \
--with-curl \
--with-freetype \
--with-gettext \
--with-jpeg \
--with-kerberos \
--with-libdir=lib64 \
--with-libxml \
--with-mysqli \
--with-ldap-sasl \
--with-openssl \
--with-pcre-jit \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-pear \
--with-iconv \
--with-xsl \
--with-zlib \
--with-bz2 \
--with-mhash \
--with-zip \
--enable-cli \
--enable-calendar \
--enable-ftp \
--enable-gd \
--enable-fpm \
--enable-bcmath \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-pdo \
--enable-shmop \
--enable-soap \
--enable-static \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-intl \
--enable-mysqlnd \
--enable-xml \
--enable-fpm
编译安装
make -j 4 && make install
配置环境变量
vim /etc/profile
在/etc/profile
文件末尾添加下面语句
export PATH=$PATH:/usr/local/php83/bin
执行下面命令使配置生效
source /etc/profile
创建软链接
ln -s /usr/local/php83/sbin/php-fpm /usr/local/php83/bin/php-fpm
复制文件
cp php.ini-production /usr/local/php83/etc/php.ini && cp /usr/local/php83/etc/php-fpm.conf.default /usr/local/php83/etc/php-fpm.conf && cp /usr/local/php83/etc/php-fpm.d/www.conf.default /usr/local/php83/etc/php-fpm.d/www.conf
注册到系统服务
vim /etc/systemd/system/php83-fpm.service
写入下面内容
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php83/var/run/php-fpm.pid
ExecStart=/usr/local/php83/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php83/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
可以使用下面命令控制PHP
systemctl daemon-reload
systemctl enable php83-fpm
systemctl start php83-fpm
systemctl status php83-fpm
5. 安装WordPress
下载源码
wget https://cn.wordpress.org/latest-zh_CN.zip
解压源码
apt-get install -y unzip
unzip latest-zh_CN.zip
修改nginx.conf
vim /usr/local/nginx/conf/nginx.conf
修改为下面内容
location / {
root /usr/local/src/wordpress/;
index index.html index.htm index.php;
}
location ~ \.php$ {
root /usr/local/src/wordpress/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
重载nginx
配置
systemctl reload nginx
评论区