Magento是一个用PHP编写的开源电子商务平台。它在2018年被Adobe收购,被命名为Adobe eCommerce。它也作为一个商业和基于云的产品提供。你可以使用Magento创建高容量的专业购物网站。它同时提供--单店和多店模式。它配备了很多模块来扩展其功能。
$ sudo apt update $ sudo apt upgrade
一些你的系统需要的软件包。
$ sudo apt install wget curl nano software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
这些软件包中的一些可能已经安装在你的系统上。
$ sudo ufw status
你应该得到以下输出:
Status: inactive
允许SSH端口,这样防火墙就不会在启用它时破坏当前的连接:
$ sudo ufw allow OpenSSH
也允许HTTP和HTTPS端口:
$ sudo ufw allow http $ sudo ufw allow https
启用防火墙
$ sudo ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup
再次检查防火墙的状态。
$ sudo ufw status
你应该看到一个类似的输出:
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6)
$ sudo add-apt-repository ppa:ondrej/php
接下来,安装Magento所需的PHP和它的扩展:
$ sudo apt install php8.2-fpm php8.2-mysql php8.2-bcmath php8.2-xml php8.2-zip php8.2-curl php8.2-mbstring php8.2-gd php8.2-tidy php8.2-intl php8.2-cli php8.2-soap php8.2-xsl libsodium-dev libsodium23 libssl-dev libcurl14-openssl-dev
验证安装:
$ php --version PHP 8.2.5 (cli) (built: Apr 14 2023 04:27:02) (NTS) Copyright (c) The PHP Group Zend Engine v4.2.5, Copyright (c) Zend Technologies with Zend OPcache v8.2.5, Copyright (c), by Zend Technologies
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ php composer-setup.php --2.2 $ php -r "unlink('composer-setup.php');"
安装Composer,把二进制文件移到/usr/local/bin目录。
$ sudo mv composer.phar /usr/local/bin/composer
通过检查其版本来验证安装。
$ composer --version Composer version 2.2.21 2023-02-15 13:07:40
$ sudo apt install mysql-server
检查MySQL的版本。
$ mysql --version mysql Ver 8.0.33-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))
这一步对于8.0.28及以上版本的MySQL是必要的。进入MySQL外壳。
$ sudo mysql
运行以下命令,为你的根用户设置密码。确保它有数字、大写、小写和特殊字符的混合。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';
退出外壳。
mysql> exit
运行MySQL安全安装脚本。
$ sudo mysql_secure_installation
首先,你将被要求提供你的根密码。输入它。接下来,你将被要求安装验证密码组件。它检查MySQL中使用的密码的强度。按Y来安装它。接下来,你将被要求设置密码验证策略的级别。选择2,因为它是最强的一个。
Securing the MySQL server deployment. Enter password for user root: 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 There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2 Using existing password for root. Estimated strength of the password: 100
接下来,输入N以拒绝更改你的根密码。另外,输入Y可以删除匿名用户,不允许远程root登录,删除测试数据库,并重新加载权限表。
更改root密码 ? ((按y|Y为是,按任何其他键为否) : N
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N ... skipping. 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 Success. 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 Success. 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 - Dropping test database... Success. - Removing privileges on test database... Success. 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 Success. All done!
$ sudo mysql -u root -p
为Magento创建一个数据库。
mysql> CREATE DATABASE magento;
创建一个SQL用户账户。
mysql> CREATE USER 'magentouser'@'localhost' IDENTIFIED BY 'Your_password2';
给予该用户在数据库上的所有权限。
mysql> GRANT ALL PRIVILEGES ON magento.* TO 'magentouser'@'localhost';
冲洗用户的权限。
mysql> FLUSH PRIVILEGES;
退出外壳。
mysql> exit
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \ | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
添加Nginx稳定版的存储库。
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \ http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \ | sudo tee /etc/apt/sources.list.d/nginx.list
更新系统软件库。
$ sudo apt update
安装Nginx。
$ sudo apt install nginx
验证安装。
$ nginx -v nginx version: nginx/1.24.0
启动Nginx服务器。
$ sudo systemctl start nginx
$ sudo snap install core && sudo snap refresh core
安装Certbot。
$ sudo snap install --classic certbot
使用下面的命令,通过在/usr/bin目录下创建符号链接,确保Certbot命令可以被运行。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
运行下面的命令来生成一个SSL证书。
$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d magento.example.com
上述命令将下载一个证书到你服务器上的/etc/letsencrypt/live/magento.example.com目录中。
生成一个Diffie-Hellman组证书。
$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096
检查Certbot更新调度器服务。
$ sudo systemctl list-timers
你会发现snap.certbot.renew.service是计划运行的服务之一。
NEXT LEFT LAST PASSED UNIT ACTIVATES ..... Sun 2023-02-26 06:32:00 UTC 9h left Sat 2023-02-25 18:04:05 UTC 2h 59min ago snap.certbot.renew.timer snap.certbot.renew.service Sun 2023-02-26 06:43:20 UTC 9h left Sat 2023-02-25 10:49:23 UTC 10h ago apt-daily-upgrade.timer apt-daily-upgrade.service Sun 2023-02-26 09:00:06 UTC 11h left Sat 2023-02-25 20:58:06 UTC 5min ago apt-daily.timer apt-daily.service
对该进程进行模拟运行,以检查SSL更新是否工作正常。
$ sudo certbot renew --dry-run
如果你没有看到任何错误,你就一切就绪了。你的证书将自动更新。
$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
添加Elasticsearch资源库。
$ echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
更新系统的资源库列表。
$ sudo apt update
安装Elasticsearch。
$ sudo apt install elasticsearch
Elasticsearch使用大量的内存。你需要根据你的服务器大小来限制它的使用。创建文件/etc/elasticsearch/jvm.options.d/memory.options文件并打开编辑。
$ sudo nano /etc/elasticsearch/jvm.options.d/memory.options
在其中粘贴以下代码。
-Xms1g -Xmx1g
按Ctrl + X保存该文件,并在提示时输入Y。这就将Elasticsearch配置为使用1GB的RAM。你可以根据需要使用任何数值。
启动并启用该服务。
$ sudo systemctl enable elasticsearch --now
检查Elasticsearch是否在工作。
$ curl http://localhost:9200
你应该看到以下输出。
{ "name" : "magento", "cluster_name" : "elasticsearch", "cluster_uuid" : "6yks8tZ6T4GskIwWoXuSLA", "version" : { "number" : "7.17.10", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "fecd68e3150eda0c307ab9a9d7557f5d5fd71349", "build_date" : "2023-04-23T05:33:18.138275597Z", "build_snapshot" : false, "lucene_version" : "8.11.1", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
$ curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
将APT仓库添加到你的源列表中。
$ echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
更新系统版本库列表。
$ sudo apt update
发布以下命令来安装Redis服务器。
$ sudo apt install redis
确认Redis的版本。
$ redis-server -v Redis server v=7.0.11 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=3af367a78d5e21e9
让我们通过使用以下命令来验证服务连接。
$ redis-cli
你将被切换到Redis的外壳。
第一步是为 Redis 默认用户设置密码。用你选择的强密码替换 Your_Redis_Password。确保你在密码前加上 > 字符。
127.0.0.1:6379> acl setuser default >Your_Redis_Password
测试 Redis 认证。
127.0.0.1:6379> AUTH Your_Redis_Password OK
127.0.0.1:6379> ping PONG
通过键入exit退出服务。
$ sudo mkdir /var/www/magento -p
把Magento目录的权限给当前用户。
$ sudo chown $USER:$USER /var/www/magento/ -R
切换到/var/www目录。
$ cd /var/www
在我们进一步行动之前,你需要认证Magento存储库所需的密钥。访问网站https://account.magento.com/,你会得到以下页面,要求你使用你的Adobe ID登录。
点击用Adobe ID登录按钮,进入以下页面。
如果你有一个Adobe ID,请输入你的凭证继续,或者你可以在这里创建一个账户。一旦你创建了你的账户并登录,打开URL https://marketplace.magento.com/customer/accessKeys/。你也可以通过访问你的个人资料并点击访问钥匙链接来访问这个页面。
点击Create A New Access Key按钮来创建你的认证密钥。给你的钥匙起个名字,以便识别。
记下公钥和私钥,以便下一步的工作。
创建Magento项目。
$ composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition magento
你会被要求提供版本库的用户名和密码。用公钥作为你的用户名,用私钥作为你的密码。你会被问到是否要在Composer配置目录中存储凭证。输入y就可以了。
Creating a "magento/project-community-edition" project at "./magento" Authentication required (repo.magento.com): Username: 53211xxxxxxxxxxxxxxxxxxxxxxxxxxx Password: Do you want to store credentials for repo.magento.com in /home/navjot/.config/composer/auth.json ? [Yn] y Installing magento/project-community-edition (2.4.6) - Downloading magento/project-community-edition (2.4.6) - Installing magento/project-community-edition (2.4.6): Extracting archive Created project in /var/www/magento Loading composer repositories with package information Info from https://repo.packagist.org: #StandWithUkraine Updating dependencies Lock file operations: 564 installs, 0 updates, 0 removals - Locking 2tvenom/cborencode (1.0.2) - Locking adobe-commerce/adobe-ims-metapackage (2.2.0) ...............................................
运行以下命令来设置文件权限并使Magento二进制文件可执行。同时,将Magento目录的所有者设置为Nginx用户,以便其能够访问网站。
$ cd /var/www/magento/ $ sudo find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} + $ sudo find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} + $ sudo chown -R :nginx . $ sudo chmod u+x bin/magento
$ cd /var/www/magento
运行以下命令来安装Magento。
$ bin/magento setup:install \ --base-url=http://magento.example.com \ --use-secure=1 \ --base-url-secure=https://magento.example.com \ --use-secure-admin=1 \ --db-host=localhost \ --db-name=magento \ --db-user=magentouser \ --db-password=Your_password2 \ --admin-firstname=Navjot \ --admin-lastname=Singh \ --admin-email=navjot@example.com \ --admin-user=navjot \ --admin-password=admin_password \ --language=en_US \ --currency=USD \ --timezone=America/Chicago \ --use-rewrites=1 \ --elasticsearch-host=http://127.0.0.1 \ --elasticsearch-port=9200 \ --session-save=redis \ --session-save-redis-db=0 \ --session-save-redis-password=redis_password \ --cache-backend=redis \ --cache-backend-redis-db=2 \ --cache-backend-redis-password=redis_password \ --page-cache=redis \ --page-cache-redis-db=4 \ --page-cache-redis-password=redis_password
一旦这个过程完成,你会得到一个类似的输出。
....... [SUCCESS]: Magento installation complete. [SUCCESS]: Magento Admin URI: /admin_19uadb Nothing to import.
记下管理员URI,你以后会需要它来访问管理面板。
创建Magento cron作业。
$ php bin/magento cron:install
验证cron作业。
$ crontab -l
你应该看到以下输出。
#~ MAGENTO START d1957f62aa710cc367525c9ec68dd7456d4311756b5aa37d2143c4a98b25318c * * * * * /usr/bin/php8.2 /var/www/magento/bin/magento cron:run 2>&1 | grep -v "Ran jobs by schedule" >> /var/www/magento/var/log/magento.cron.log #~ MAGENTO END d1957f62aa710cc367525c9ec68dd7456d4311756b5aa37d2143c4a98b25318c
$ sudo nano /etc/php/8.2/fpm/pool.d/www.conf
我们需要将PHP进程的Unix用户/组设置为nginx。找到文件中的user=www-data和group=www-data两行,将其改为nginx。
... ; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. ; RPM: apache user chosen to provide access to the same directories as httpd user = nginx ; RPM: Keep a group allowed to write in log dir. group = nginx ...
找到文件中listen.owner = www-data和listen.group = www-data这两行,将其改为nginx。
; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions. The owner ; and group can be specified either by name or by their numeric IDs. ; Default Values: user and group are set as the running user ; mode is set to 0660 listen.owner = nginx listen.group = nginx
按Ctrl + X保存文件,并在提示时输入Y。
将PHP-FPM和PHP-CLI的执行时间增加到180秒。
$ sudo sed -i 's/max_execution_time = 30/max_execution_time = 180/' /etc/php/8.2/fpm/php.ini $ sudo sed -i 's/max_execution_time = 30/max_execution_time = 180/' /etc/php/8.2/cli/php.ini
将 PHP-FPM 的内存限制从 128MB 提高到 256MB。你可以根据你的服务器大小和要求来提高这个限制。
$ sudo sed -i 's/memory_limit = 128M/memory_limit = 256M/' /etc/php/8.2/fpm/php.ini
Magento默认将媒体库的文件大小限制设置为2MB。运行以下命令,将文件大小限制增加到25MB。
$ sudo sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 25M/g' /etc/php/8.2/fpm/php.ini $ sudo sed -i 's/post_max_size = 8M/post_max_size = 25M/g' /etc/php/8.2/fpm/php.ini
开启Zlib压缩功能。
$ sudo sed -i 's/zlib.output_compression = Off/zlib.output_compression = On/g' /etc/php/8.2/fpm/php.ini
重新启动 PHP-FPM 服务。
$ sudo systemctl restart php8.2-fpm
将PHP会话目录的组别改为Nginx。
$ sudo chgrp -R nginx /var/lib/php/sessions
$ sudo nano /etc/nginx/nginx.conf
在include /etc/nginx/conf.d/*.conf;这一行前添加以下内容。
server_names_hash_bucket_size 64;
按Ctrl + X保存文件,并在提示时输入Y。
创建并打开文件/etc/nginx/conf.d/magento.conf进行编辑。
$ sudo nano /etc/nginx/conf.d/magento.conf
将以下代码粘贴在其中。
upstream fastcgi_backend { server unix:/run/php/php8.2-fpm.sock; } server { # Redirect any http requests to https listen 80; listen [::]:80; server_name magento.example.com; return 301 https://$host$request_uri; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name magento.example.com; set $MAGE_ROOT /var/www/magento; include /var/www/magento/nginx.conf.sample; client_max_body_size 25m; access_log /var/log/nginx/magento.access.log; error_log /var/log/nginx/magento.error.log; # TLS configuration ssl_certificate /etc/letsencrypt/live/magento.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/magento.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/magento.example.com/chain.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384'; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; }
完成后按Ctrl + X保存文件,并在出现提示时输入Y。
Magento自带的Nginx配置模板在/var/www/magento/nginx.conf.sample,我们已经将其包含在我们的配置中。$MAGE_ROOT变量指向我们在文件中设置的Magento网站根目录,并在样本配置文件中使用。
验证Nginx配置文件的语法。
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
重新启动Nginx服务。
$ sudo systemctl restart nginx
通过URL https://magento.example.com,打开Magento网站。你应该看到以下页面。
如果你不能加载CSS和JS,那么运行以下命令。
$ cd /var/www/magento $ php bin/magento setup:static-content:deploy -f $ php bin/magento indexer:reindex
$ php /var/www/magento/bin/magento module:disable Magento_AdminAdobeImsTwoFactorAuth $ php /var/www/magento/bin/magento module:disable Magento_TwoFactorAuth
运行下面的命令来创建这些类。
$ php /var/www/magento/bin/magento setup:di:compile
同时清理缓存。
$ php /var/www/magento/bin/magento c:c
$ php /var/www/magento/bin/magento info:adminuri Admin URI: /admin_19uadb
在你的浏览器中打开URL https://magento.example.com/admin_19uadb,你将得到以下画面。
输入你在安装过程中提供的管理员凭证,并点击登录按钮继续。你将会看到以下屏幕。
你会收到一个弹出窗口,要求允许Adobe收集使用数据。点击 "不允许 "按钮继续。
下一步是为电子邮件配置SMTP,以便我们可以重新启用双因素认证。访问商店>>配置菜单。
从左侧展开高级菜单,点击系统选项,打开电子邮件设置页面。
取消勾选在传输、主机和端口选项前面的使用系统值。点击传输的下拉菜单,从中选择SMTP。在我们的教程中,我们将使用Amazon SES作为邮件发送器。
输入你的SMTP主机,587作为端口,用户名和密码,将Auth设置为LOGIN,将SSL设置为TLS。完成后点击保存配置按钮。现在我们已经配置了电子邮件设置,下一步是配置商店的电子邮件ID,以便我们可以测试它们。
向上滚动并展开同一页上的General菜单,选择Store Email Addresses选项。
取消对默认发送者电子邮件字段的勾选,并输入你的商店的电子邮件ID。完成后点击 "保存配置 "按钮。同样地,打开 "联系人 "页面,做同样的修改,并点击 "保存配置 "按钮来完成它。
改变管理员选项会影响到缓存,你会收到一个警告。运行以下命令来手动清除缓存。
$ php /var/www/magento/bin/magento c:c
要测试电子邮件,请访问店面页面并打开 "联系我们 "页面。你可以直接使用URL https://magento.example.com/contact/ 来访问它。发送一个测试邮件并点击提交按钮。你应该收到一个类似的邮件。
$ php /var/www/magento/bin/magento module:enable Magento_AdminAdobeImsTwoFactorAuth $ php /var/www/magento/bin/magento module:enable Magento_TwoFactorAuth
升级模块的设置。
$ php /var/www/magento/bin/magento setup:upgrade
运行下面的命令来创建类。
$ php /var/www/magento/bin/magento setup:di:compile
同时清理缓存。
$ php /var/www/magento/bin/magento c:c
如果你不能访问管理区,也可以运行以下命令。
强制部署静态内容。
$ php /var/www/magento/bin/magento setup:static-content:Deploy -f
设置文件权限。
$ cd /var/www/magento $ sudo find var generated vendor pub/static pub/media app/etc -type f -exec chmod g+w {} + $ sudo find var generated vendor pub/static pub/media app/etc -type d -exec chmod g+ws {} + $ sudo chown -R :nginx .
访问管理门户,你将得到以下屏幕。
我们将使用谷歌认证器方法。如果你有一个硬件密钥,你可以使用它。谷歌认证器方法适用于任何TOTP应用程序,包括Authy、1Password、Bitwarden、Microsoft Authenticator等。点击 "应用 "按钮继续。
在下一页,你会得到一个QR码,用你的2FA应用程序扫描。在你的应用程序中输入详细信息,并将生成的代码复制到Authenticator代码栏中。点击 "确认 "按钮,进入管理面板。
上一条: 注册.mx墨西哥域名步骤