软件开发

WSL 是 Windows Subsystem for Linux 的简称, 可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生虚拟机开销。

安装 WSL

1.开启 WSL

首先需要使用管理员权限打开 PowerShell 执行如下命令
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
或者在程序和功能选打开 适用于 Linux 的 Windows 子系统
出现提示时,重启计算机。

2.下载 Linux 发行版

直接参考 WSL安装指南 使用 Microsoft Store 安装的方法无法将 Linux 安装到系统盘之外的分区,这里使用的是 手动下载 的方法。

单击以下链接下载您喜欢的 Linux 的发行版,这里选的是 Ubuntu 20.04

3.安装 Linux 发行版

使用 7-ZIP 或者其他工具解压下载的 appx 文件 ( 比如解压到 D:\WSL\Ubuntu ) 然后运行 ubuntu2004.exe
需要等待一两分钟时间来完成安装,安装完成后,系统会提示创建新的用户帐户(及其密码)。

如果需要使用 root 默认登录可以运行 ubuntu2004.exe config --default-user root

4.配置 Linux 环境

首先需要进行一些本地化操作

# 修改为国内软件源
sudo sed -Ei 's/\w+.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
apt-get update
# 设置系统语言为中文
apt install -y language-pack-zh-hans
update-locale LANG=zh_CN.UTF-8

5.服务自启动配置

由于 WSL 并没有 Linux 内核的支持,仅在用户层实现了系统调用的翻译。因此诸如 systemd、cgroup 是无法工作的。
只能使用 start-stop-daemon 或其他进程守护工具实现服务管理

  • 编辑 vim /etc/init.wsl 文件添加如下内容
#! /bin/sh
# Filename: /etc/init.wsl
service nginx start
  • 开始 -> 运行 中输入 regedit 回车打开注册表编辑器

定位到 计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 后新建一个 REG_SZ 类型的值,名称随意,数值数据填写以下内容

mshta vbscript:CreateObject("WScript.Shell").Run("wsl -d Ubuntu-20.04 -u root bash /etc/init.wsl",0,TRUE)(window.close)

以后就可以向 /etc/init.wsl 追加服务,实现开启自启动了

配置开发环境

Linux 环境搞好,下面就开始根据自己需要配置相应的开发环境

1.PHP Nignx MySQL 环境搭建

得益于 Wordpress 等平台的流行,PHP 仍是目前使用广泛 Web 开发语言,LNMP 环境

sudo apt-get install -y nginx php-fpm php-mysql php-curl mysql-server
# 开放端口
sudo sed -i 's/bind-address/#bind-address/' /etc/mysql/mysql.conf.d/mysqld.cnf
# 启动 MySQL
service mysql start
# 启动 fpm
service php-fpm start
# 启动 nginx
service nginx start
  • 解决 nginx 超时的问题

/etc/nginx/nginx.conf 中的 http block 中加入

fastcgi_buffering off;

配置添加如下内容

server {
    listen       80;
    server_name  domain.com;

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        # 设置监听端口
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    }

    # 用于伪静态
    if (!-e $request_filename) {
        rewrite ^/(.*) /index.php?r=$1 last;
    }
}
  • 配置 MySQL 密码

运行 sudo mysql -u root 进入命令行模式

-- 重设密码
UPDATE mysql.user SET host = '%', authentication_string = PASSWORD('123456') WHERE user = 'root';
FLUSH privileges;
-- 用户创建与授权
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
CREATE DATABASE `database` CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci';

Composer 是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。

# 安装 Composer
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir=/usr/bin --filename=composer
php -r "unlink('composer-setup.php');"
# 配置 国内镜像
composer config -g repo.packagist composer https://packagist.phpcomposer.com
  • PHP 扩展安装

除了 apt 中自带的 PHP 扩展,很多扩展需要通过 pecl 命令安装。
这里通过配置 php_ini 实现 php.ini 的自动配置

sudo apt install -y php-pear php-dev
sudo touch /etc/php/7.4/mods-available/pear.ini
sudo ln -s /etc/php/7.4/mods-available/pear.ini /etc/php/7.4/fpm/conf.d/20-pear.ini 
sudo ln -s /etc/php/7.4/mods-available/pear.ini /etc/php/7.4/cli/conf.d/20-pear.ini
sudo pear config-set php_ini /etc/php/7.4/mods-available/pear.ini
pecl install yaf

2.配置 Golang + PostgreSQL 环境

# 安装必要依赖
sudo apt-get install -y git cmake
# 下载并解压
curl -o- https://golang.google.cn/dl/go1.21.5.linux-amd64.tar.gz | sudo tar zxf - -C /usr/local
sudo ln -s /usr/local/go/bin/go /usr/bin/go
# 配置环境变量
go env -w GOPROXY=goproxy.cn
# git 配置
git config --global core.editor nano
  • 安装 postgres 数据库
apt-get install -y postgresql
# 数据库初始化 
pg_dropcluster 12 main --stop
TZ=UTC pg_createcluster 12 main --start -d /opt/pgsql
# 服务启动
service postgresql start
# 修改数据库密码
su postgres -c psql
postgres=# \password
  • 数据库备份还原
export PGPASSWORD=123456
# 导出
su postgres -c 'pg_dumpall -O -x -c --inserts --if-exists --quote-all-identifiers -f /tmp/db.sql'
# 导入
psql -h 127.0.0.1 -U postgres -f db.sql
  • 安装 consul 服务
sudo apt install lsb-release
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
echo "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update && sudo apt-get install consul


编辑服务脚本 /etc/init.d/consul

#!/bin/sh

# Quick start-stop-daemon example, derived from Debian /etc/init.d/ssh
set -e

# Must be a valid filename
NAME=consul
PIDFILE=/var/run/$NAME.pid
#This is the command to be run, give the full pathname
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="agent -server -bootstrap-expect=1 -bind=127.0.0.1 -data-dir=/var/lib/$NAME -ui -log-file=/var/log/$NAME"

case "$1" in
  start)
        echo -n "Starting daemon: "$NAME
    start-stop-daemon --start --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
        echo "."
    ;;
  stop)
        echo -n "Stopping daemon: "$NAME
    start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
        echo "."
    ;;
  restart)
        echo -n "Restarting daemon: "$NAME
    start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
    start-stop-daemon --start --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
    echo "."
    ;;

  *)
    echo "Usage: "$1" {start|stop|restart}"
    exit 1
esac

exit 0

3.安装 nodejs 环境

# 安装 Node Version Manager
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 安装 v10 的 Node
source ~/.bashrc
nvm install 10
# 解决 npm install 失败的问题
npm config set unsafe-perm=true
# 设置国内镜像
npm config set registry https://registry.npm.taobao.org

4. Python 环境

sudo apt install -y python3-distutils
curl -sSL https://bootstrap.pypa.io/get-pip.py | sudo python3
pip config --global set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

卸载 WSL

cmd 下输入 wslconfig /l,可以看到所有已安装的发行版

rem 卸载删除wsl
wslconfig /u <DistributionName>

评论

This is just a placeholder img.