本文记录一下在openSUSE上安装LNMP的整个过程,最后会搭建一个WordPress用于测试。
openSUSE Tumbleweed作为滚动发行的版本,Nginx/MariaDB/PHP这些软件基本上可以说你只要用包管理器装那就是最新版。
当然PHP这东西有点特殊,生产用的环境可能并不想总是升级它,这个也可以用包管理器把它hold住,后续再详细说这个。
要说这个发行版装LNMP和Debian上装LNMP比较一下的话,这个稍微麻烦一点,不能像Debian那样开箱即用,有些东西需要你自己手动配置,比如PHP-FPM/Nginx的权限等。
安装/启动nginx:
sudo zypper in -y nginx sudo systemctl start nginx sudo systemctl enable nginx
安装/启动mariadb:
sudo zypper in -y mariadb sudo systemctl start mariadb sudo systemctl enable mariadb
初次安装mariadb,你需要执行下面的命令配置一下:
sudo mysql_secure_installation
第一个提示回车设置你的数据库root密码,后面的这些如无特殊需求全部选择Y:
Enter current password for root (enter for none) Switch to unix_socket authentication [Y/n] Change the root password? [Y/n] Remove anonymous users? [Y/n] Disallow root login remotely? [Y/n] Remove test database and access to it? [Y/n] Reload privilege tables now? [Y/n]
登录mariadb:
mysql -u root -p
创建一个名为wordpress的数据库和用户:
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost IDENTIFIED BY '设置你的用户密码'; FLUSH PRIVILEGES; quit
安装php:
sudo zypper in php7 php7-fpm php7-mysql php7-gd php7-imagick \ php7-gettext php7-mbstring php7-intl php7-bcmath php7-openssl \ php7-exif php7-zip php7-curl php7-fileinfo php7-opcache php7-redis
openSUSE默认把php-fpm的配置文件都重命名为.default了,你需要自己复制一份:
sudo cp /etc/php7/fpm/php-fpm.conf.default /etc/php7/fpm/php-fpm.conf sudo cp /etc/php7/fpm/php-fpm.d/www.conf.default /etc/php7/fpm/php-fpm.d/www.conf
然后编辑php-fpm.conf:
sudo nano /etc/php7/fpm/php-fpm.conf
在这里你需要启用日志记录:
pid = run/php-fpm.pid error_log = log/php-fpm.log
接下来编辑www.conf:
sudo nano /etc/php7/fpm/php-fpm.d/www.conf
这里的用户和组需要改为nginx:
user = nginx group = nginx
在www.conf内还可以调整php-fpm的进程数什么的,这些根据自己的需要来就行,例如这些配置:
pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 pm.max_requests = 500
编辑php.ini:
sudo nano /etc/php7/cli/php.ini
安全起见,把这个注释去掉改为0:
cgi.fix_pathinfo=0
以上配置确认无误后,启动php-fpm:
sudo systemctl start php-fpm sudo systemctl enable php-fpm
你可能需要检查一下php-fpm是否在运行,使用下面的命令查看,显示是active说明正常:
sudo systemctl status php-fpm
接下来配置nginx,编辑主配置文件:
sudo nano /etc/nginx/nginx.conf
用户和组改为nginx与php-fpm内的设置对应,进程数改为auto,建议打开gzip:
user nginx nginx; worker_processes auto; gzip on;
接下来尝试安装一个wordpress,进到/srv/www目录内下载解压wordpress的压缩包:
cd /srv/www sudo wget https://wordpress.org/latest.zip sudo unzip latest.zip sudo rm -rf latest.zip
目录的用户和组设置为nginx,与之前在php-fpm/nginx内的配置对应:
sudo chown -R nginx:nginx wordpress/
接下来新建一个nginx站点配置文件:
sudo nano /etc/nginx/vhosts.d/wordpress.conf
写入如下配置:
server { listen 80; server_name opensuse.imlala.best; root /srv/www/wordpress; index index.html index.php; client_max_body_size 100M; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
测试nginx配置是否正常:
sudo nginx -t
如果正常,重载nginx使你的配置生效:
sudo systemctl reload nginx
打开你的域名开始wordpress的安装:
安装redis优化wordpress:
sudo zypper in -y redis
openSUSE的redis有点蛋疼,如果你直接用systemd启动的话,会发现服务是起不来的。
正确的步骤是,首先你要复制一份配置文件,同时要保证连同文件的用户和组等属性都一致:
cp -a /etc/redis/default.conf.example /etc/redis/default.conf
上面的cp命令后面带了个a,这个a就是保留文件的原始属性。
如果你之前直接用root权限的命令行启动过或者复制配置文件的时候没保留原始属性之后用systemd启动过,你会发现现在服务还是起不来,因为日志文件的所有者变成root了,redis没有权限向这个文件写数据。
删除这个日志文件,让redis自己重新创建一个:
rm -rf /var/log/redis/default.log
再次启动,并且注意后面你需要指定一个实例,我这里就用default了:
sudo systemctl start redis@default sudo systemctl enable redis@default sudo systemctl status redis@default
在wordpress后台安装redis对象缓存的插件启用即可:
配置SSL证书,安装certbot的nginx插件:
sudo zypper in -y python3-certbot-nginx
执行下面的命令会自动帮你签发证书:
certbot --nginx
你可能不想经常升级php,防止程序出现一些不兼容的问题,可以通过下面的方式把php相关的软件包锁定,这样它就不会随系统更新了:
sudo zypper al php7 sudo zypper al php7-*
查看是否锁定成功:
sudo zypper ll
应该有类似回显:
# | 名称 | 类型 | 软件源 --+--------+---------+--------- 1 | php7 | package | (任意) 2 | php7-* | package | (任意)