操作
- 设置主机名。
- 设置 ssh 连接一段时间后,断开的问题。
- 自定义用户,禁用 root 用户登录(使用普通用户登录,并使用公钥登录)。
- 安装 docker 环境。
# 先安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加阿里云仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装
yum -y install docker-ce
# 启动
systemctl start docker
# 设置开机自启动
systemctl enable docker
# docker info
再来安装 docker-compose
打开 https://github.com/docker/compose/tags 选择想要的版本,点击进去。
https://github.com/docker/compose/releases/tag/v2.23.3
选择对应系统的文件,我这里选择的是 docker-compose-linux-x86_64
cd /usr/local/src
wget https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
如果你已经安装了旧版本的 Docker,首先卸载旧版本:
sudo apt remove docker docker-engine docker.io containerd runc
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
运行以下命令验证 Docker 是否正确安装:
sudo docker run hello-world
为了避免在每次运行 Docker
命令时都需要使用 sudo
,可以将当前用户添加到 docker
用户组:
sudo usermod -aG docker $USER
请注意,在更改用户组后,你可能需要注销并重新登录才能使更改生效。
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
通过 docker 客户端工具。点击设置->Docker Engine。增加以下配置。
{
…,
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
点击 Apply & Restart 按钮,保存并重启。
# 查看
docker info
感觉用了镜像速度也那样。
docker 的确是个好东西。该早一点就用起来。当下还在熟悉和练习中。
渐渐去丰富和完善。
.env
# 时区
TZ=Asia/Shanghai
# 项目对应文件夹
SOURCE_DIR=./www
# nginx https://nginx.org/
NGINX_NAME=nginx
NGINX_VERSION=1.25.3
NGINX_HTTP_HOST_PORT=80
NGINX_HTTPS_HOST_PORT=443
NGINX_CONFD_DIR=./conf/nginx/conf.d
NGINX_CONF_FILE=./conf/nginx/nginx.conf
NGINX_SSL_CERTIFICATE_DIR=./conf/nginx/ssl
NGINX_LOG_DIR=./logs/nginx
# php8.3
PHP_LOG_DIR=./logs/php8.3
# mysql
MYSQL_DATA=./data/mysql8.2-data
MYSQL_PORT=3306
# redis
REDIS_PORT=6379
当前,在项目中,无法通过 127.0.0.1 来连接 mysql 容器中的 mysql。可以通过修改 手动 修改 ip 的方式来搞定。
# 查看当前容器的 ip
ip addr
# php 和其他容器公用宿主机的 ip 修改项目中连接 mysql 的 ip 得到
172.19.0.1
docker exec -it xxx bash
# 安装 pdo pdo_mysql 扩展
docker-php-ext-install pdo pdo_mysql
# 安装 mysqli 扩展
docker-php-ext-install mysqli
# 退出 重启 (xxx 容器 id)
exit
docker restart xxx
# 进入容器中
apt-get update
apt-get install -y iproute2
# 这个时候就有了
ip addr show
https://www.jianshu.com/p/2217cfed29d7
https://blog.csdn.net/longfeng995/article/details/130704949
https://ricen.eu.org/index.php?control=doc&view=detail&id=326&i=1
php8 + mysql8 + nginx 1.25.3 + redis 7.2 的 docker-compose.yml
下边来弄弄 docker compose。 的确很好用。
先准备一下文件。
.
├── docker-compose.yml
└── vini123
├── nginx
│ └── default.conf
└── www
└── nginx
└── index.php
这里先看看 docker-compose.yml
文件。
# docker 信息
docker info
docker version
# 查看镜像
docker images
# 运行一个镜像
# --name 别名
# -p 端口映射( 宿主机端口:容器服务端口 )
# -d 以守护进程的方式运行(不加就会卡住占用窗口)
docker run --name my-nginx -d -p 80:80 nginx
# 查看活着的容器
docker ps
# 查看活所有容器
docker ps -a
# 停止容器
docker stop xxx
# 启动一个关闭的容器
docker start xxx
# 查看容器状态
docker stats
# 进入容器(以bash的形式进行交互模式)
docker exec -it xxx bash
# 退出容器(容器依然在运行)
exit
# 重启容器 (xxx 为容器 id 的前三个字符即可)
docker restart xxx
# 删除容器 (删除前需先停止)
docker rm xxx
# 删除镜像
docker rmi nginx
如果发现配置了定时任务,却发现没有执行到。可以先看看日志。
# 看日志
tail -f /var/log/cron
# 查看日志文件
ll /var/log/cron*
# 看哪些用户在使用定时任务
ls /var/spool/cron/
# 查看某个用户的任务详情。比如 nginx
more /var/spool/cron/nginx
# 开机自启动
systemctl enable crond
情况是这样的。本来是有日志的。如果把日志删除了,即使重启 crontab 服务也是没有日志的。还有一种就是以前根本就没打开日志。这两种情况下边的方法都可以搞定。还有说在 /etc/rsyslog.d 下建立 50-default.conf。那还不如下边的方法。 下边的方法是通过 chatGPT 查询到的。有时候还是很方便的。
要查看CentOS 8 crontab的日志,您可以按照以下步骤进行处理:
将上述行的注释符号(“#”)移除,以启用cron日志记录功能。保存并关闭该文件。
重新启动 rsyslog 服务,以确保更改生效:
$ sudo systemctl restart rsyslog
如果上述方法不起作用,则您可以尝试在 crontab 命令中将日志记录级别设置为更高的级别。例如,将以下行添加到 crontab 文件的顶部:
MAILTO=user@domain.com
在上述命令中,将 MAILTO 设置为您的邮件地址,以接收有关 crontab 任务运行情况的通知。将脚本路径替换为实际的脚本路径,并将输出重定向到 /dev/null,以避免在终端中看到任何输出。将 "> /dev/null 2>&1" 去掉就可以在/var/spool/mail用户文件夹下查看cron任务的执行情况了。
服务器快到期了,所以在阿里云又从新买了一台。这两天一直在忙新服务器环境的搭建,和数据迁移的处理。
购买的服务器
dnf upgrade-minimal --security
dnf update
// 记得这样重启,要不登录系统后,还是会提醒你进行安全更新
reboot
vim /etc/ssh/sshd_config
// 末尾追加(数字自己定义合适的)
ClientAliveInterval 60
ClientAliveCountMax 5
// 重启 ssh
service sshd restart
如果登录进去,显示的主机名是一堆字母数字组成的杂乱的名字。你可以通过阿里云控制台进行设置主机名。也可以在服务器,通过命令行来完成。这么做,一方面是好看,二方面如果服务器多,好知道是哪台服务器。
禁用 root 用户远程登录服务器。使用密匙+密码的方式进行登录。这样可以增加服务器的安全。
做好这些,记得进行做镜像。方便后边出错了,不好解决的时候,进行回滚处理。
安装开发环境。
暂时先装了这么多。为了性能以及可靠性,数据库也可以单独阿里云购买。只是这个要单独花钱啊。
wordpress 用来做博客和cms系统都还不错。这些年,虽然也想着自己用 laravel 写一个博客系统起来。后来还是搁浅了。 wordpress 可以很方便使用主题和插件。一个好的主题的好,用过就知道。
不得不换服务器了。在做迁移之前在想,我现在的服务器环境安装的开发环境都是最新的,曾经的 wordpress 还能迁移过来吗。之前一种思路是只要把数据弄过来就行。其实,还真行。后来尝试了下,在旧的服务器上,将 wordpress 直接更新到最新版本,也就是当前的 6.1 版本。再做迁移也是可以的。
操作。
我有两套博客。最久的那套是 2013 年左右安装的。太旧没更新了。以为更新不了,没想到更新几次竟然能更新成功。于是按照上边的方法进行操作,结果有好几个地方修改不好。于是就有这个方式。
https://wordpress.org/download/
后来想想。wordpress 的更新应该不是所有的代码都更新。要不也不会出现之前的错误还需要修复。既然方式二能实现版本更新,那方式一似乎不是很有用。
不过很重要一点。要备份好文件和数据库。这样方便多次试错。还有如果域名有更换了,媒体文件或某些链接会失效。这个方面的确做不好。不过好在是很容易升级更新。
如果遇到错误,可以在 wp-config.php 中打开 debug 模式,进行查看跟踪。
如果后台只有英文,可以在 wp-config.php 中增加 define('WPLANG', 'zh_CN') 配置,然后在后台多语言那设置下就好。
对于主题,可以去网上找,觉得好看的好用的都可以,不过代码都是别人的,也要注意安全性相关的东西。还有代码是别人的,也要注意别人的使用说明。下载好主题后,将主题文件包放在 wp-content/themes 下,然后在后台中设置激活,再进行细致化设置就好。
还有,如果对主题部分不满意,你也可以修改源码。如果仅仅是样式方面的问题,可以通过增加 css,来覆盖样式来解决。比如隐藏一些不需要 div,修改某些div 的布局等等。
对于插件更新,默认是要你配置 ftp。这个不是太方便也不太安全。单独给它配个有点麻烦,把权限大的给它又觉得不放心。干脆就不使用 ftp 的方式来安装更新就好了。在配置文件 wp-config.php 中增加 define('FS_METHOD','direct');
配置。然后将项目的用户和组都是设置成 php 对应的用户组。比如我的php 和 nginx 都公用 nginx:nginx 用户组。 使用 chown nginx:nginx xxx 就好了。
博客是一方面,我的主要服务端逻辑,都是通过 laravel 开发的。 laravel 的依赖包比较多,对 php 的版本都有很严格的控制。我之前的 php 版本是 7.4 不是太古老,但也是不好使。现在都是 php8.2.3。是大版本的更新。不过好在,一般的功能语法都会有向下兼容。开始吧。
# 将代码拉到新的服务器对应位置
git clone xxx
composer install
这个时候,如果遇到 Your lock file does not contain a compatible set of packages. Please run composer update.
可以加上 --ignore-platform-reqs
参数来忽略版本的匹配。但只是尝试,如果即使安装成功了,并不一定能使用成功。
composer install --ignore-platform-reqs
这次是成功安装了。
但发现报个错误。
Carbon\Carbon::setLastErrors(): Argument #1 ($lastErrors) must be of type array
果然某些依赖还是有改变。这个单独更新 carbon 包就可以。
composer update nesbot/carbon
composer install --ignore-platform-reqs
到此,框架算是安装好了。
cp .env .example .env
php artisan key:generate
php artisan migrate --seed
laravel 常规安装流程操作是上边边这样的。而我们这里都是完整的项目,里边配置很多,通过上边边这种方式要修改的太多了。我是直接创建一个 .env 文件,然后将旧的文件内容复制过来就好。
vim .env
# 复制配置过来就行
.env 中数据库的配置正确后
php artisan migrate --seed
对相关报错进行处理。
composer update facade/ignition --ignore-platform-reqs
文件权限操作
chmod 777 storage -R
chmod bootstrap/cach -R
安装前端脚手架
yarn
yarn dev
发现有版本等相关信息报错。一种方式是直接删除 yarn.lock 文件,删除 node_modules 文件夹。再进行安装。
安装后台环境。
cd resources/admin
yarn
报 error @achrinza/node-ipc@9.2.2: The engine "node" is incompatible with this module. Expected version "8 || 10 || 12 || 14 || 16 || 17". Got "18.14.2"
我们直接设置
忽略。再继续。yarn config set ignore-engines true
yarn
yarn run build:prod
发现报错 Building for production...Error: error:0308010C:digital envelope routines::unsupported。出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响。
再继续
export NODE_OPTIONS=--openssl-legacy-provider
yarn run build:prod
然后又是 *These dependencies were not found: core-js/modules/es.array.push.js** 错误。
yarn add core-js --dev
yarn run build:prod
到此,总算是好了。凡是遇到问题解决问题就好。
配置 nginx,修改域名映射。检查测试。
就是将整个项目打包,复制过去,解压。然后配置下。
服务器安装好 mysql 后。需要先初始化。初始化后,需要创建用户以及分配权限。默认 root 用户是禁用远程登录的。这个时候创建一个远程登录用户就比较重要。对远程登录用户看需要,可以在多个纬度来进行控制。比如限定 ip,就是在指定的 ip 下,才可以访问。然后对权限进行控制,对表进行控制等等。
历史记录: https://blog.vini123.com/382
先创建一个远程可登录用户看看
# 内网登录 mysql
mysql -u root -p
# 创建一个远程可登录用户
create user shenqi@'%' identified by '33441314';
创建用户后,该用户只能连接到数据库服务器,但并没有操作该数据库服务器的权限。
mysql8 以后,必须先创建用户,才可以授权。这里创建用户最好限定ip,这样远程连接必须在该ip下进行。提高数据库的安全性。大多时候,使用 localhost 连接更好。