admin 发布的文章

最近迁移网站,在服务器上安装了指定版本Node 后,然后 yarn 项目所需要的依赖文件时,报错模块与版本不兼容,提示版本过低,故而需要换版本。

安装了编译好的 Node.js 版本,可以按照以下步骤来卸载它:

找到 Node.js 安装目录

首先,需要找到 Node.js 的安装目录。如果是使用编译源代码的方式安装的 Node.js,会安装到 /usr/local/bin 目录下。

删除 Node.js 可执行文件

删除 Node.js 的可执行文件。
这通常是 nodenpm(或 npxnpm-cli.js 等)。

sudo rm /usr/local/bin/node
sudo rm /usr/local/bin/npm
sudo rm /usr/local/bin/npx

删除 Node.js 替代链接(如果有)

如果创建了符号链接到其他目录,如 /usr/bin,也应该删除这些链接。

sudo rm /usr/bin/node
sudo rm /usr/bin/npm
sudo rm /usr/bin/npx

删除 Node.js 的 man 页面(如果有)

如果在安装过程中创建了 man 页面,也应该删除它们。

sudo rm -rf /usr/local/share/man/man1/node.1
sudo rm -rf /usr/local/share/man/man1/npm*.1

删除 Node.js 的库文件

删除 Node.js 的库文件,这些文件通常位于 /usr/local/lib/usr/lib 目录下。

sudo rm -rf /usr/local/lib/node*
sudo rm -rf /usr/lib/node*

删除 Node.js 的配置文件(如果有)

如果你在安装过程中创建了配置文件,也应该删除它们。

sudo rm -rf /etc/apt/sources.list.d/nodesource.list

删除 Node.js 的安装目录

最后,删除 Node.js 的安装目录,通常是 /usr/local/lib/nodejs

sudo rm -rf /usr/local/lib/nodejs

清理 npm 缓存(可选)

如果你想要彻底清理 Node.js 的痕迹,你也可以清理 npm 的缓存。

npm cache clean --force

请注意,这些步骤假设你是以标准方式安装 Node.js,并且没有使用包管理器。

清理了node 环境后,也记得把使用 npm 安装其他的全局命令清理一下,不然使用或者创建时会提示没有此类文件或目录存在。

ln -s /root/node-v16.17.0-linux-x64/bin/yarn /usr/local/bin/yarn
ln: failed to create symbolic link '/usr/local/bin/yarn': File exists

yarn
-bash: /usr/local/bin/yarn: No such file or directory

npm清理

如果你确定现有的链接是错误的或者已经过时了,你可以先删除它,然后创建一个新的链接。

检查现有文件:不确定是否应该删除链接,可以检查现有文件是否正确

cat /usr/local/bin/yarn

这将显示文件的内容。如果它是一个有效的 yarn 可执行文件,你可能不需要做任何事情。如果它不是,你可以删除它,然后创建符号链接。

使用ls检查现有的链接更直观

ls -l /usr/local/bin/yarn
ls -l /usr/local/bin/pm2

这将显示链接当前指向的位置,打印出来的内容里node-v后面的数字就是版本,对应不上安装的就可以删了。

ls -l /usr/local/bin/yarn
lrwxrwxrwx 1 root root 37 Apr 17 10:39 /usr/local/bin/yarn -> /root/node-v16.0.0-linux-x64/bin/yarn

如果确定可以安全地这样做,删除链接:

sudo rm /usr/local/bin/yarn
sudo rm /usr/local/bin/pm2

卸载安装的PHP 7.4及其相关扩展

列出已安装的PHP相关包: 使用apt命令列出所有与PHP 7.4相关的包:

sudo apt list --installed | grep php7.4

卸载PHP 7.4及其扩展: 使用apt命令卸载列出的所有PHP 7.4相关的包。您可以使用通配符*来卸载所有相关的包:

sudo apt purge php7.4*

或者,您可以逐个卸载每个包:

sudo apt purge php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-fpm

删除多余的配置文件: 卸载PHP包后,可能会有一些剩余的配置文件留在系统中。您可以使用以下命令来清理这些文件:

sudo apt autoremove
sudo apt autoclean

删除PPA源: 如果您想要完全清理系统并且不打算再次使用ondrej/php存储库,您可以删除这个PPA源:

sudo add-apt-repository --remove ppa:ondrej/php

更新包列表: 最后,更新您的包列表以确保所有更改都反映在系统中:

sudo apt update

基础环境

Ubuntu22.04

安装Nginx

如果不想要最新版的 Nginx,可以直接执行 sudo apt -y install nginx ,
Ubuntu 22.04使用 apt 软件包管理器安装默认的是 nginx1.18 版本。

想用 1.18 版本以上或以下指定版本可用以下方法。

通过apt命令安装指定版本

1.更新Ubuntu系统内的软件包。

sudo apt update

2.添加 apt 源文件
将 Nginx 的主线仓库添加到 /etc/apt/sources.list 文件

可以使用tee命令将文本直接写入文件。

# 备份源文件(可选)
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑源文件
# 可以使用tee命令将文本直接写入文件
# 这里使用了 tee -a 命令,其中 -a 参数表示将内容追加到文件末尾,而不是覆盖现有文件。
# 添加二进制包仓库:
echo "deb http://nginx.org/packages/mainline/ubuntu/ jammy nginx" | sudo tee -a /etc/apt/sources.list

# 添加源代码仓库
echo "deb-src http://nginx.org/packages/mainline/ubuntu/ jammy nginx" | sudo tee -a /etc/apt/sources.list

说明:服务器Ubuntu版本是Ubuntu22.04(LTS)版的,所以系统代号是:jammy
如果要查看系统代号,使用命令 lsb_release -c 或者 lsb_release -cs

root@chixm: # lsb_release -c
Codename:       jammy

root@chixm: # lsb_release -cs
jammy

3.导入nginx公钥
因为在 Ubuntu 22.04 上导入 Nginx 官方公钥时,使用apt-key导入秘钥,会警告apt-key 命令已经不再被推荐使用。
所以可以使用gpg命令和相关的目录来管理密钥。
下载 Nginx 公钥: 可以使用 curl 或 wget 来下载公钥文件。

## 使用 curl
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor > nginx.gpg

## 使用 wget
wget https://nginx.org/keys/nginx_signing.key -O - | gpg --dearmor > nginx.gpg

再将公钥导入到 APT 密钥环

sudo install -o root -g root -m 644 nginx.gpg /etc/apt/trusted.gpg.d/

最后,更新软件包列表以确保 APT 包管理器使用新的公钥。

sudo apt update

4.安装Nginx。

# 查看可安装的 nginx 版本
sudo apt-cache show nginx

#安装nginx 1.25.1
sudo apt-get install nginx=1.25.0-1~jammy

# 查看Nginx版本
sudo nginx -v

5.然后启动nginx

sudo systemctl start nginx

如果有如下报错的话:

Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.

多半是内置的Apache抢占了nginx的端口,执行以下命令:

sudo systemctl stop apache2.service
sudo systemctl restart nginx

6.nginx 部分配置与命令

使用systemctl命令控制服务:
设置开机启动: sudo systemctl enable nginx
启动nginx:sudo systemctl start nginx
停止nginx:sudo systemctl stop nginx
重启nginx:sudo systemctl restart nginx
查看状态:sudo systemctl status nginx

配置路径:
nginx 配置文件目录: /etc/nginx ;
配置文件:/etc/nginx/conf.d/default.conf;
默认存放网站的目录:/usr/share/nginx/html,如果需要更改目录修改配置文件的内容即可

安装 PHP

以下是安装不同版本的 PHP 和 一些常用扩展的方法步骤。

php7.4

使用的版本是7.4,就以这个版本操作。

1.首先需要安装PHP的仓库:

sudo apt install software-properties-common

2.然后添加ondrej/php存储库,它提供了多个PHP版本:

sudo add-apt-repository ppa:ondrej/php

出现 Press [ENTER] to continue or Ctrl-c to cancel. 时按回车继续。
注意:(ondrej/php)是第三方仓库,可能会带来一些风险,因为它不是Ubuntu官方维护的。如果介意,请安装 ubuntu 提供的默认版本 。

3.再次更新安装包:

sudo apt update

4.然后就可以直接安装php7.4了!

sudo apt install php7.4

# 这里如果需要php7.4-fpm服务,也可以直接用以下命令去安装,
# 该指令会直接安装包含 php 在内的 php7.4 和 php7.4-fpm
sudo apt install php7.4-fpm -y

5.安装PHP扩展(可以根据需要删减需要的)。
PHP 扩展的安装通常是以 php 开头,接着是版本号,然后是-和扩展名称。格式php7.4-[extname]

并不是所有 php 扩展都可以通过 apt 命令进行安装,Apt 仓库仅提供常用 PHP 扩展,某些扩展可能需要自己手动编译。

sudo apt install -y php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip

6.安装 php-fpm

## 安装 PHP-FPM
sudo apt install php7.4-fpm

在安装PHP扩展之后,重启PHP-FPM服务,否则新的PHP扩展不会加载到PHP-FPM。运行命令 sudo systemctl restart php7.4-fpm

使用systemctl命令控制服务:
启动服务 sudo systemctl start php7.4-fpm
开机自启动 sudo systemctl enable php7.4-fpm
检查 PHP-FPM 服务状态 sudo systemctl status php7.4-fpm
重新启动 sudo systemctl restart php7.4-fpm

7.创建文件验证PHP安装

echo '<?php phpinfo(); ?>' | sudo tee /usr/share/nginx/html/info.php

phpinfo()函数会展示PHP的所有配置信息,然后写入到了info.php。(测试完记得删除)

再修改 nginx 配置文件以支持PHP,/etc/nginx/conf.d/default.conf

server {
  listen 80;
  server_name localhost;
  # 网站根目录
  root /usr/share/nginx/html;

  location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?q=$uri&$args;
  }

  location ~ \.php$ {
    try_files $uri =404;
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}

修改Nginx配置文件后可以运行nginx -t命令测试Nginx配置的语法是否正确。

如果没有错误nginx会提示nginx: configuration file /etc/nginx/nginx.conf test is successful

测试Nginx配置正确之后重启服务 sudo systemctl restart nginx

注意:
如果出现502 Bad Gateway。
检查 PHP-FPM 的配置文件(路径通常位于 /etc/php/7.4/fpm/pool.d/www.conf ),确认 listen 指令是否正确设置为监听端口9000

详细修改信息可以看文章 迁移博客遇到的几个问题 下的验证PHP安装提示 502

再次访问应该就能看到展示PHP的所有配置信息了。

PHP8.1

Ubuntu 22.04 使用 apt 软件包管理器安装默认的是 PHP 8.1 版本。

1.运行以下命令,安装PHP。

sudo apt -y install php-fpm

2.安装常用PHP扩展(例如:curl、gd、mbstring、mysql、xml、zip等):

sudo apt install php-curl php-gd php-mbstring php-mysql php-xml php-zip

3.修改Nginx配置文件以支持PHP。

此步骤参考上文PHP7.4的安装步骤第7小节,创建文件验证PHP安装。

使用systemctl命令控制服务:
启动服务 sudo systemctl start php8.1-fpm
开机自启动 sudo systemctl enable php8.1-fpm
检查 PHP-FPM 服务状态 sudo systemctl status php8.1-fpm
重新启动 sudo systemctl restart php8.1fpm

PHP8.2

在 Ubuntu 20.04 安装 PHP 8.2 和上文安装 php7.4 一样。

需要做的就是启用 ondrej/php 存储库,并使用 apt 安装 PHP 8.2。

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php

sudo apt update
sudo apt install php8.2-fpm

PHP 扩展的安装通常是以 php 开头,接着是版本号,然后是-和扩展名称。格式php8.2-[extname]

并不是所有php扩展都可以通过apt命令进行安装,Apt仓库仅提供常用PHP扩展,某些扩展可能需要自己手动编译。

例如,要安装MySQL和GD扩展,您可以运行命令sudo apt install php8.2-mysql php8.2-gd

sudo apt update
sudo apt install php8.2-mysql php8.2-gd -y
sudo systemctl restart php8.2-fpm
sudo systemctl status php8.2-fpm

安装MySQL

安装MySQL8.0

#
sudo apt -y install mysql-server

#查看MySQL版本
mysql -V

配置MySQL

进入MySQL

sudo mysql

设置root用户密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'mynewpassword';

## 密码以Mysql.1234为例
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'Mysql.1234';

## 退出MySQL数据库
exit;

对MySQL进行安全性配置

sudo mysql_secure_installation

输入root用户的密码。本示例中输入Mysql.1234

$ sudo mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

配置说明(Yes | No 根据需要自行选择):
输入Y,设置密码验证策略

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

根据提示,选择密码验证策略。本示例输入2

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

输入Y,更改root用户密码。(根据需要,也可以不改)

Change the password for root ? ((Press y|Y for Yes, any other key for No) : Y

输入root用户密码。(如果跳过了上一步,这一步也不会出现)

New password:

Re-enter new password:

Estimated strength of the password:

输入Y,确认使用已设置的密码

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y

输入Y删除MySQL自带的匿名用户

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y

输入Y,禁止MySQL的root用户的远程登录权限。后面也可修改

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y

输入Y,移除test数据库。

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : 

输入Y,重新加载授权表。

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

当命令行回显All done!时,表示配置完成。

测试登录MySQL数据库。

## 登录MySQL数据库
sudo mysql -uroot -p

安装MySQL5.7

进入MySQL官方的Community Server选择历史版本:https://downloads.mysql.com/archives/community/

1.下载tar包

可以使用wget命令链接下载地址,也可以使用腾讯云提供的文件上传,将tar包放在Ubuntu的一个目录中

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.42-1ubuntu18.04_amd64.deb-bundle.tar

在目录下解压tar包

tar xvf mysql-server_5.7.42-1ubuntu18.04_amd64.deb-bundle.tar

2.安装

安装依赖lib包

sudo apt-get install ./libmysql*
sudo apt-get install libtinfo5

安装客户端和服务端,按提示可能要先安装community版本

sudo apt-get install ./mysql-community-client_5.7.42-1ubuntu18.04_amd64.deb
sudo apt-get install ./mysql-client_5.7.42-1ubuntu18.04_amd64.deb

#此步需要输入数据的root密码
sudo apt-get install ./mysql-community-server_5.7.42-1ubuntu18.04_amd64.deb

sudo apt-get install ./mysql-server_5.7.42-1ubuntu18.04_amd64.deb 

过程中会提示设置MySQL的密码,用户名默认root

3.启动MySQL

对MySQL进行安全性配置

配置说明见上文8.0部分

sudo mysql_secure_installation

检查mysql服务状态

systemctl status mysql.service

出现下面界面说明安装成功

root@chixm: ~# systemctl status mysql.service
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2024-04-22 00:48:15 CST; 40s ago
    Process: 18203 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
    Process: 18242 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid (code=exited, status=0/SUCC>
   Main PID: 18244 (mysqld)
      Tasks: 27 (limit: 1939)
     Memory: 170.5M
        CPU: 312ms
     CGroup: /system.slice/mysql.service
             └─18244 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

Apr 21 00:48:14 iZ7xv436kce53s2t1abuavZ systemd[1]: Starting MySQL Community Server...
Apr 21 00:48:15 iZ7xv436kce53s2t1abuavZ systemd[1]: Started MySQL Community Server.

至此MySQL5.7.42已经安装成功。

登录MySQL

mysql -u root -p

如果不想使用终端管理 mysql,也可以使用图形界面 phpMyAdmin

安装 phpMyAdmin Nginx

当前phpMyAdmin稳定版本5.2.1。这里在Nginx的根目录安装phpMyAdmin。

切换Nginx的默认根目录。

cd /usr/share/nginx/html

下载phpMyAdmin。

wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip

下载完成运行unzip命令解压缩phpMyAdmin源码。

sudo unzip phpMyAdmin-5.2.1-all-languages.zip

重命名一下目录,配置时简短一点

mv phpMyAdmin-5.2.1-all-languages phpmyadmin

配置Nginx PhpMyAdmin

配置Nginx运行phpMyAdmin。

方法一:是使用Nginx的location来运行phpMyAdmin。

Nginx配置文件/etc/nginx/conf.d/default.conf

server {
    listen 80;
    listen 443 ssl http2;
    server_name xm.moshanghua.net;
    root /usr/share/nginx/html;

    location / {
        index index.php index.html index.htm;
        try_files $uri$uri/ /index.php?q=$uri&$args;
    }

    location /phpmyadmin/ {
        alias /usr/share/nginx/html/phpmyadmin/;# 注意末尾的斜杠
        index index.php index.html index.htm;
        try_files $uri $uri/ /phpmyadmin/index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
    # 不想启用 HTTPS 就注释或者删除下面这段配置,上面的 listen 443 也注释掉
    # 引入证书文件开始
    ssl_certificate   /etc/nginx/ssl/xm.moshanghua.net.pem; #指定SSL证书文件路径。
    ssl_certificate_key  /etc/nginx/ssl/xm.moshanghua.net.key; # 指定SSL证书密钥文件路径。
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1;
    ssl_prefer_server_ciphers on;
    # 引入证书文件结束
}

修改配置后,nginx -t命令测试Nginx配置的语法

sudo systemctl restart nginx使nginx配置文件生效

要访问phpMyAdmin界面,输入URLhttps://xm.moshanghua.net/phpmyadmin/index.php

在用户名字段中输入前面安装的数据库的用户名root或者设置名称,在密码字段中输入数据库的密码。

然后登录后,就能看到phpMyAdmin面板。

方法二:配置Nginx的Server块,通过独立子域名来运phpMyAdmin。

另外创建一个Nginx的Server块并配置独立的子域名。

server {
    listen 80;
    listen 443 ssl http2;
    server_name phpmyadmin.moshanghua.net;
    root /usr/share/nginx/html/phpmyadmin;
    index index.php index.html index.htm;

    location ~ \.php$ {
        try_files $uri =404;
        include fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # 引入证书文件开始
    ssl_certificate   /etc/nginx/ssl/phpmyadmin.moshanghua.net.pem; #指定SSL证书文件路径。
    ssl_certificate_key  /etc/nginx/ssl/phpmyadmin.moshanghua.net.key; # 指定SSL证书密钥文件路径。
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1;
    ssl_prefer_server_ciphers on;
    # 引入证书文件结束

}

修改配置后,nginx -t命令测试Nginx配置的语法

sudo systemctl restart nginx使nginx配置文件生效

要访问phpMyAdmin界面,输入URLhttps://phpmyadmin.moshanghua.net/index.php

在用户名字段中输入前面安装的数据库的用户名root或者设置名称,在密码字段中输入数据库的密码。

然后登录后,就能看到phpMyAdmin面板。

几处配置

创建临时目录

变量 $cfg['TempDir'] (/usr/share/nginx/html/phpmyadmin/tmp/)无法访问。phpMyAdmin无法缓存模板文件,所以会运行缓慢。

解决此问题:

1.确保临时目录存在

检查 phpmyadmin/ 目录下是否存在/tmp目录,如果不存在,需要创建它:

sudo mkdir -p phpmyadmin/tmp

确保 Nginx 用户(通常是 www-data)有权限读写该临时目录。

sudo chown www-data:www-data phpmyadmin/tmp
sudo chmod 700 phpmyadmin/tmp

2.配置 phpMyAdmin
复制 phpMyAdmin 目录下的示例配置文件并且重命名为config.inc.php来配置 phpMyAdmin,直接新建空白config.inc.php文件也可以。

sudo cp phpmyadmin/config.sample.inc.php phpmyadmin/config.inc.php

需要在 phpMyAdmin 的配置文件 config.inc.php 末尾添加设置 $cfg['TempDir']
文件路径根据存放位置来写,本文存放在/usr/share/nginx/html/

# 打开文件
sudo vim phpmyadmin/config.inc.php

# 末尾添加
$cfg['TempDir'] = '/usr/share/nginx/html/phpmyadmin/tmp';

3.重启 Nginx 和 PHP-FPM

保存配置文件的更改,并重启 Nginx 和 PHP-FPM 以确保更改生效:

sudo systemctl restart nginx

# 对应自己安装的版本
sudo systemctl restart php7.4-fpm

设置一个 短语密码

从 phpMyAdmin 4.0.0 版本开始,config.inc.php 配置文件支持使用短语密码(也称为“密码短语”或“passphrase”)来加密存储在配置中的敏感数据,如 blowfish_secret

设置 blowfish_secret 的步骤:

1.生成加密密钥

生成一个随机的加密密钥:

1.使用密码生成器成一个随机的密码短语。
随机密码生成器
Random Password Generator

2.使用命令行工具,如 opensslopenssl rand -base64 24

root@chixm:~# openssl rand -base64 24
Gt1jl6WQJy5HoUQcHp4+I0Y7Qfnfd+eu

这将生成一个 24 字节的随机字符串,以 Base64 编码。

2.编辑配置文件

将生成的加密密钥添加到您的 config.inc.php 文件中,设置 blowfish_secret

$cfg['blowfish_secret'] = '你生成的随机密码短语';

# 打开编辑器
sudo vim phpmyadmin/config.inc.php

#添加一下配置到文件末尾
$cfg['blowfish_secret'] = 'Gt1jl6WQJy5HoUQcHp4+I0Y7Qfnfd+eu'; // 可以是任何随机字符串

3.重启 Nginx 和 PHP-FPM

保存配置文件的更改,并重启 Nginx 和 PHP-FPM 以确保更改生效:

sudo systemctl restart nginx

# 对应自己安装的版本
sudo systemctl restart php7.4-fpm

配置数据库 phpMyAdmin

报错下图信息是因为phpMyAdmin 需要数据库表。


所以,要导入自带的 phpMyAdmin 归档包 create_tables.sql 来为 phpMyAdmin 创建表。

使用 MySQL 客户端或 phpMyAdmin 登录到数据库服务器,创建数据库 phpmyadmin,并导入create_tables.sql的数据。

使用 MySQL 导入演示:
登录

mysql -u root -p

创建数据库 phpmyadmin

CREATE DATABASE phpmyadmin;

选择数据库,然后导入目录 phpMyAdmin/sql下的 create_tables.sql 这个库。

# 选择数据库
USE phpmyadmin;

# 导入数据
SOURCE /usr/share/nginx/html/phpmyadmin/sql/create_tables.sql;

完整步骤:

root@chixm:~ # mysql -u root -p

mysql> CREATE DATABASE phpmyadmin;
Query OK, 1 row affected (0.00 sec)

mysql> USE phpmyadmin;
Database changed
mysql> SOURCE /usr/share/nginx/html/phpmyadmin/sql/create_tables.sql;
Query OK, 1 row affected, 1 warning (0.00 sec)

Database changed
Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.02 sec)

...

mysql>

这时再刷新就没有错误提示了。

安装部署Node.js环境

演示版本v16.17.0,更多版本访问官网 Node.js

使用NVM安装管理多个Node.js版本

NVM(Node Version Manager)是Node.js的版本管理软件,可以轻松在Node.js各个版本间进行切换。
以下是简单的安装使用,更多信息可以前往 NVM 的 Github仓库进行查看

https://github.com/nvm-sh/nvm

安装 NVM

使用 cURL 或 Wget 命令:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

运行以下命令以加载 NVM 环境

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

验证 NVM 是否安装成功

nvm --version

使用 NVM 管理 Node.js 版本

查看可用的 Node.js 版本

通过以下命令查看所有可用的 Node.js 版本:

nvm ls-remote

安装特定版本的 Node.js

例如,要安装最新的 LTS 版本:

nvm install --lts

要安装其他特定版本,例如 v16.17.0 版本:

nvm install 16.17.0

查看已安装的 Node.js 版本

使用以下命令查看系统中已安装的所有 Node.js 版本:

nvm ls

切换 Node.js 版本

要切换到特定版本的 Node.js,例如切换到 v16.17.0 版本:

nvm use 16.17.0

设置默认 Node.js 版本

要将某个版本设置为默认版本,例如设置 v16.17.0 为默认版本:

nvm alias default 16.17.0

卸载 Node.js 版本

要卸载某个版本的 Node.js,例如卸载 v16.17.0 版本:

nvm uninstall 16.17.0

使用 Node.js 和 npm

使用以下命令来查看当前使用的 Node.js 和 npm 版本:

node -v
npm -v

使用二进制文件安装

该方式使用的安装包是已编译好的二进制文件。解压文件之后,在bin文件夹中就已存在node和npm,无需重复编译。

如果需要将该软件安装到其他目录下,又不想后期移动,可以先进入其目录下执行下载解压命令

本文以安装Node.js v16.0.0版本为例,且文件放在根目录下。

具体操作说明如下:

# 进入根目录
cd ~

pwd
/root

下载Node.js安装包。

wget https://nodejs.org/dist/v16.17.0/node-v16.17.0-linux-x64.tar.xz

解压Node.js安装包

tar xvf node-v16.17.0-linux-x64.tar.xz

创建node和npm的软链接。

创建软链接后,您可以在任意目录下直接使用node和npm命令。

ln -s /root/node-v16.17.0-linux-x64/bin/node /usr/local/bin/node
ln -s /root/node-v16.17.0-linux-x64/bin/npm /usr/local/bin/npm

至此,Node.js环境已安装完毕。软件默认安装在/root/node-v16.0.0-linux-x64/目录下。

参考文章 、资料

Kimi.ai
ubuntu 18.04 apt 升级 nginx 1.14 到 nginx 1.21.0
手动部署LNMP环境(Ubuntu)
服务器Ubuntu Server 22.04安装低版本MySQL5.7
https://cumi.co/20221006/
如何在Ubuntu 22.04安装 phpMyAdmin Nginx

又是一年冬季 / 这一年的流水账

年底了,各种回顾一年总结性的东西也又陆续出来了。部分软件上开始推年度报告的页面,通过数据可视化的方式,让你看看你这一年在软件上都做了些什么。近期逛博客时,也看到部分博主有发布文章总结今年,展望2024。

这不,看多了自己也就想瞎写点东西了,但自己并不是一个有仪式感的人,就抓住这股冲动劲记录一下。

但简单地回忆,并没有记起多少事情,对于很多事和物,由于距离遥远已是模糊的,脑子里留下的更多是疲惫。

想了很久无从下笔。没有总结性的东西,那就随便写一写,记录一下想法。

时间都去哪了 / 书影视听 / 统计

聆听 / 音乐

这一年,邂逅新歌1143首,偏爱ilem教主的词和洛天依、祝眠的声音,再者就是歌手上新增了陈响,发现唱的部分作品也挺好听的。
然后,连续六年蝉联我年度歌手的马旭东变成了洛天依。
循环的多点的就是ilem写的《梦良衣》《上山岗》《白鸟过河摊》《四风判词》,以及今年天依出的几张专辑里的歌。
古风曲风上听的多的还是双笙 (陈元汐)和银临。
纯音乐上,吟唱,中国民族乐器,也挖掘出了原神的部分游戏纯音BGM。

QQ音乐年度报告

关于视频 / 追剧 / 看番 / 看漫

这一年用的最多的是 B 站,看似没时间,这数据一出来,居然看了有400+小时的视频。(可怕~

bilibili 账号等级在今年来到了 6 级,我也是个6级号了。

年度 DNA:翻唱、你好生活第三季、虚拟歌手、虚拟 UP 主、手游直播

感兴趣的综艺是《你好生活!》,这一年跳集前前后后依旧刷了好几遍,挺治愈的。七月中旬又开播了新一季《你好生活 第四季》

一些观看过的视频稿件:
几个反复在刷的翻唱视频(莫名觉得好听):
《江山无限》 不得不承认高手在民间!
张朝阳版本《亲爱的那不是爱情》
【王健林】西海情歌 2015大连万达年会
万达年会上王健林演唱《假行僧》

东方甄选嘉宾访谈:
(因为看过这几位的作品,又刚好发现东方甄选还有相关的访谈,就...
渐冻症抗争者蔡磊对话东方甄选:苦难选中我们,请相信,我命由我不由天
【官方高清版】盲人长笛演奏家吴晶对话俞敏洪、董宇辉:这命运但凡有剥夺,暗中皆有补偿
【官方字幕版】倪萍对话东方甄选:聊聊姥姥的质朴智慧

【官方字幕版】张朝阳对话东方甄选:追求使命感,实现人生意义,你会没有白来这一生
《流浪地球2》导演郭帆,主演吴京、沙溢做客东方甄选直播间访谈全程

关于杨苡先生的两节采访:
年初看过她的书《一百年 那些人 那些事》,后知道的有采访
杨苡 翻译家|每一天都要过得最好
吾家吾国|独家专访百岁翻译家杨苡:“人生值得一过”

bilibili年度报告

看过的部分番剧:
《鬼灭之刃刀匠村篇》、《捡到退婚大小姐,教她幸福的事》
还在连载中的:
《咒术回战第二季》、《间谍过家家第二季》、《葬送的芙莉莲》(好看!!)

国创这一年里看过:
凡人系列《凡人修仙传风起天南》(重制版)《凡人星海飞驰序章》以及正在播的《凡人修仙传星海飞驰(年番)》
已完结的作品:
《伍六七之暗影宿命》《镇魂街第三季》《风灵玉秀第二章》《时光代理人第二季》《三体》《两不凝第二季》《雾山五行 2 犀川幻紫林篇》......

顺便记录一下持续再看的UP主:ilem洛天依影视飓风-LKs-江寻千踢踢小鱼视角姬水一大魔王一夜北风吹
新增在某一段时间内看着或者持续再看:
诺子喵呜,一个盲人up主(一段时间没看,这涨粉速度,年初看着时好像10+w粉丝来着。
时雨ioo,一个游戏up主,没玩游戏,说不上为什么就持续关注着了。
昕有凌兮杂货铺Nic机长,两位机长。
陈师傅开挖机卡车拍档卡二代,挖掘机,卡车,内燃机的嘶吼
polebug23锦堂生活空间饭饭麻麻菜菜,学习,vlog,记录
渡一教育-提薪课程序员小山与Bug吴悠讲编程峰华前端工程师好奇代码的三木PegasusWangDeeLMind,编程相关

腾讯视频上,每一季的动漫都也有在看。
追了几年的《斗罗大陆》今年完结了,其实 恋爱大陆 剧情已经没什么吸引力了,更像是一种习惯,一种有始有终的执念。
《斗破苍穹》本来也是很期待和小医仙的剧情的,但新一季年番播出到现在感觉越来越歪了。
然后国创这块,点开的大部分新漫,清一色不是索以文化就是若鸿文化制作...
值得一提的是,观感持续在线的《完美世界》,复播的《吞噬星空》以及《仙逆》个人感觉都是很棒的作品!但仙逆不是年番作品,这季到现在已经快完结了。

爱奇艺上的《大主宰年番》也在追着,目前感觉也还行。

今年也看了很多漫画,多数在腾讯动漫和哔哩哔哩漫画上面看的,涉猎各种类型,作品略。

最后,各平台放出的大量动漫 PV 预告里也看到了部分关注过的作品新作以及部分耳濡目染的的 IP,DNA 动了,期待上映中!

游戏

嗯...没玩过新游戏,游戏也没怎么玩,反正就好像是萎了什么游戏都玩不下去

只和大肥在 欧卡 2 里一起跑过几趟运输
mc 今年也有去玩玩的,因为近几个月大肥又搭起了 Minecraft 服务器,还加了少量 mod
节奏大师也在年底公测上线了,又下载回来进去瞄了下,两年没打,整不会了

然后就是有在关注主播看直播但没玩的游戏,和平精英,王者荣耀,原神。

阅读

这一年主要兴趣是在文学类,历史,小说上,阅读偏向故事类型的书,散文杂著,文学鉴赏,历史读物,历史小说,自传,外加网文小说等等。

微信阅读年度报告

微信年度榜单

今年看的最多的仍旧是小说。年中又双叒叕刷了一遍《全职高手》,

读《相信》《我听见这世界缤纷》《梦想永远不会太晚》让我进一步了解上了没怎么未关注的东西,渐冻症,盲人,话剧。

部分书籍只是跳着翻了一半。

读完念念不忘的一本书是《一百年,许多人,许多事:杨苡口述自传》,对民国的历史有了点兴趣。本书属于另类的民国历史,口述历史,有“碎碎念”的感觉,跟着杨先生的视角,仿佛穿越了几个时代,见证了无数人的人与事,看完,感觉自己也是挺“八卦”的。

由作者的家境,到“西南联大”的学习经历。文中的大人物比比皆是,但于通常看的“大历史”来说,文中的人物更有生活气息,比如沈从文先生和张兆和请当时还是学生的杨先生吃林薇因带来的肉包子。尴尬闯女生宿舍的蒋校长。吴宓滴滴答答的拐杖声。巴金给鲁迅抬棺哭泣的样子。边讲话袖口边掉棉花的沈从文先生,以及沈从文对刚生完孩子的杨先生叮嘱“不能有了孩子就什么都放弃,还是要做事”......许多的轶事和大量的照片,丰富了对民国一角的认识。也从已经消逝了的时代日常生活的情形中感受时代变迁,触摸历史的温度。

汪曾祺、杨振宁是她在西南联大的同学,沈从文、巴金是她一生的知己,《呼啸山庄》是她首创名字并翻译成中文的,她的丈夫赵瑞蕻翻译了小说《红与黑》,她的哥哥杨宪益和大嫂戴乃迭被认为是“翻译了整个中国的人”。

基于杨苡的一百年,也去看了她最崇拜的哥der,看了自传,看了戴乃迭的两个祖国,然后也看到了赵蘅眼中的舅舅。

有空,也还想读读沈从文先生,巴金,季羡林的文字,也想继续挖掘下西南联大相关的事迹。

浏览网页

博客

博客存活时间又增加一年了,上半年不是很稳定,每个月博客都会掉线,具体表现为node进程占内存居高不下,一直90%往上,然后有时再高点进程就挂了…茫然啊,咱也不懂,就想着,既然是内存居高不下,那我把它拉一点起来呢?把原先的2H2G配置内存升了下变为2H4G……嗯,好像没挂服务了

然后就是大肥搞了个自动化工作台,在大肥的帮助及操作下,我的友链添加服务也加入了期中。嗯,好处就是现在再有友链申请时不用再去打开后台复制粘贴内容然后更新了,直接工作台同意就自己写入数据库更新了!解放双手。

友链上有变动,这一年里又离开了许多小伙伴。

内容方面,这一年没写过什么,就这样了。

在成本支出上,本博客花费 域名 + ECS 年付 700+的样子

然后域名上,年底一时兴起购买了几个域名,并且手里的域名增加到了 6 个, 然后后缀方面涵盖了.net .com .cool .zone .group,后面几个后缀目前处于吃灰状态。

服务器上除了博客的ECS,也还有在续费一个轻量服务器以及一个很久之前白菜价购买的虚拟机产品,但也都处于吃灰状态,挺浪费的。

我又在忙什么 / 想什么 / 变化 / 继续成长

不太好受的一年,无论是物理上,还是精神上,都让人产生一种想要出逃的冲动。
记忆力成直线的下滑,健忘……这种问题的严重程度就像从没有经历过这些事情一样。
时常情绪低落,胡思乱想。在精力有限,做不到我所想时,对自己丧失了信心。
状态特别差,工作是一团糟。
消费上依然没有节制,就没有多少积蓄。
学习上,没打鱼,晒了一年的网。

茫然惊醒,一年又这样过去了,就自己好像一直在虚度光阴…

生活 / 健康 / 运动 / 社交 / 友情

面对未知与抉择,内心充满迷茫与焦虑,但也慢慢学会了逐渐应对和接受。

目前的生活非常平淡,就像是游戏里的“NPC”,几乎每天都过得毫无新意,一年到头也不知道究竟干些什么有意义的事情,实在没什么可“总结”的。

这一年也还是处于停止探索世界的状态,身在花都附近,却依旧没去附近转过。

最大的变化大概就是换了个居住环境,22 年 11 月份的时候搬家了,从住了两年多的小巷子搬到了靠近主路边上的一公寓里 15 楼,站窗边看远处尽收眼底。(下定决心才搬的,搬家真麻烦,东西多了根本不想搬
从单间换到了一室一厅(住了近一年,又想换更大的了...
住高了唯一不足的就是停电或者电梯故障时了,回家就全靠爬楼梯了,概率虽小,但今年也有幸体验了一次,电梯进水故障,上下班爬了进一个星期的楼梯。真得劲...

健康状态说不上,略过,精神状态以及睡眠情况不好,熬夜通宵能力状态什么的相比之前也下滑了(现在下半夜困的想原地躺下睡觉)。每天都是睡不饱睡不醒的样子,其精神状态严重影响日常。

心理健康上,还不够成熟,还是不能控制好自己的情绪

运动似乎没什么可写的,两点一线的日常里,始终都没有什么像样的运动,身体也因此每况愈下。

今年下半年的平均睡眠时间是 5 小时 17 分。
不完全统计,全年一共走了 1,500,565 步,消耗 40, 492 卡路里。

vivo健康

我是 I 人,和不熟的人聊天,三两句就能没下文了。
今年在社交上还是失败的,依然不善言辞,不主动。
所以,社交对我一直是件挺累的事。

另外,值得高兴的是好兄弟在年底准备领证了,必须得狠狠地祝福一下!

工作那些事儿 / 变化

细想一下,工作上没什么可记录的,相反,总是因为工作上的事情而让自己郁郁寡欢、很少发自内心的笑。
主要,心态问题,这一年的工作状态极差,做事畏首畏尾,也没有了大的提升。

当前工作不知道怎么说,有时想想,只要能心态摆正,感觉还是可以做下去,这操作对安于工作的话来说是一个好的状态吧,但是对于不安于这份工作来说又是一个不好的状态。

嗯...所以计划是年后提桶跑路,不然磨磨蹭蹭又会是平平淡淡的一年。但其实也又纠结上了,辞职之后再做什么呢,想的越多可能越背离现实,嗯....辞了再说吧!

拥有了什么新东西 / 电子产品更新 / 消费

依然是没有节制地消费,不过买的东西已经不多了(该买的都买过了)
也买了几件新玩意,电子垃圾。

vivo X100 Pro
Apple Mac Mini 八核 M2 芯片 16G + 512 丐版
vivo WATCH 2
微软Xbox游戏手柄
vivo Pad (2022年底)
IQUNIX OG 80 虫洞(2022年底)

其他物品

一张床垫
米家智能调香机
米家智能设备/传感器若干
实体书籍若干本【文学类,编程类,设定集,(插)画集,漫画】
BEMOE 《无尽蓝》Vsinger 洛天依 十周年专辑礼盒
Swift Block 超感华容道
GAN 14 Maglev_UV版

软件 / 订阅服务

部分工具列表,使用迭代和优化调整中...

翻译:Bob
下载:Downie4
PDF+吃灰:UPDF

Word:office 365
提醒、记录、导图工具:滴答清单
文字摘抄、想法记录:Flomo
笔记记录:Wolai
读书:微信读书、QQ 读书、番茄、七猫小说,实体书(20%)

云服务:阿里云轻量应用服务器 2H2G30M 港区、 ECS 2H4G2M

......

放弃购物

白白浪费定金系列,买来包装太大没地方放(开头嫌弃地方小的原因之一),然后,有离开这城的想法了,跨省搬运感觉麻烦...

然后,BEMOE Vsinger 全员专辑《NoisyWorld》 CD版&珍藏白胶版忘记补款了...

部分截图:

钱去哪了

自己一个人,谈不上好好生活,也没有柴米油盐的概念,(之前)买东西不太会过多思考到底是否真的需要,每次都是念起然后就消费。这不,一年下来,依旧是没有多少的存款

最近有想,真发生什么事,手里的数又能做什么呢。

来年,消费观上要更加理性,尝试记账,珍惜财务支出的每一分。

学习 / 技术成长 / GTD / 知识管理

今年因为工作上的原因,还有个人懒散了,学习这件事上,其实最近几年基本上都没有学到什么东西,很少时间能沉下心研究一会东西。
技术学习停留在看,没有学和写,思考什么的就更没有了。

再者,阅读,书架上的书很多,读完的很少。

Henry:“学技术,除了工作,不就是服务自己了嘛”

大肥的这句话,听了若有所思,准备随性而为地学习了解一些新东西,如果能学以致用那就更好了。

比如今年在掘金上看到 coco大佬大漠老师出的几本关于 CSS 的小册后,又燃起了我想捣鼓 CSS 的兴趣了。还有 alphardexWebGL Shader 魔法指南,好炫酷的感觉。神光也是有在关注的一个大佬,但他出的几本小册,暂时用不上。

贴几个CodePen地址:
大漠 on CodePen:CSS
Chokcoco on CodePen:CSS
alphardex on CodePen:WebGL

其他:
CSS Inspiration -- CSS灵感

然后看过大肥日常发的部分渡一讲的碎片化知识,对出的一套教程也有想法...华峰,三木,依力等等,又贪多空想了不是... [ 别想了. jpg ],越想越发现自己什么都没做。

另外,就是记忆差,健忘,需要东西时想不起,在尝试所谓的知识管理,用工具构建个人知识合集。但目前还谈不上知识管理,既还没探索好工具的使用,也没有多少知识管理。

情绪 / 精神状态 / 改变 / 一些感想

自己在情绪管理做的挺差的,没有太多的情绪调节能力,就这一年里经常挂着情绪,可能由于对未来生活的恐惧,也不太能接受过于平庸的自己,就时常焦躁也有很重的悲观情绪,更多的是一些精神内耗。回顾整年,几乎想不起有哪些瞬间是让我感到过高兴的。

更割裂的是,我觉得很忙,又不知道在忙什么,看不到什么成果,毫无成就感。或许高估了自己,总想着短期能做多少事,而低估自己一年可以完成的事。
因为短期的目标明确,可执行力强,而长期的事模糊的,看不清,认不清自己到底想要做什么,就导致一年就那么嘘嘘晃晃的过去,什么都想做,什么都没做、
不知不觉就产生了急于求成的心理,然后就过分焦虑。就经常在(欲望过多+能力不足+高估自己=痛苦)【痛苦——解决问题——解决不了——痛苦】的死循环中。

为什么把自己搞成这样。
过一下自己的想法,欲望,需求...想的多,而能力跟不上,然后就焦虑(痛苦)上了,但自己面对焦虑,总很自责。

焦虑好像是我们的天性,是出厂默认设置,所有人都会焦虑
人,天生就喜欢避难趋易、喜欢急于求成,想同时做很多事,想不用怎么努力就成功。
焦虑的根源,说的再直白一点就是,想同时做很多事,又想立即看到效果,但无能(没有能力)。

相比面对焦虑自责,看清自己背后的欲望并设法改变才是下一步。
克制欲望,不要让自己同时做很多事。想那么多也没用,因为根本就没时间,这个没时间是事实,不是借口。
在没时间的前提下,想的越多,痛苦越大。
面对现实,看清自己真实的能力水平。先接受自己,承认自己现在确实很弱,这是现实,接受这个现实,然后在这个基础上,去做,去行动。

当自己真在做一件事时,还是没有内耗的。所以,目前大体思路是让自己更充实一点。
未来,去做,去做,去做,关上脑子开始行动,脑子里的东西,都只是在纸上谈兵。

2024,关于新的一年

具体的 flag 就不立了,暂时也没有任何长远计划,即便制定了计划,也很难如期执行,只要慢慢改变自己的想法,融入在日常的每一天就好了。

如果有可能,还是希望新的一年可以去开阔一下自己的视野,增长一些见识,也希望自己能以相对松弛的态度面对未来,然后再让生活丰富一些。如果做不到,来年继续再改变吧。

最后,断断续续改写了这一堆废话和负能量的东西,因有些东西想着但表达转述不出来,写的很乱,就当胡言乱语吧,反正没人看。
又或者,也很感谢网络对面的你愿意停留看我唠叨这糟糕的故事。
祝新年快乐!望在新年里一切顺利,保持好运!有更多的精彩等着我们。

初稿于 2024 / 01 / 01 中午
最后修改于 2024 / 01 / 20