2020年6月13日星期六

容器编排工具之Docker

容器编排工具之Docker


docker-compose项目是docker官方的开源项目,负责实现对docker容器集群的快速编排;所谓编排我们可以理解为像ansible里面的"剧本";我们把需要启动的容器,每个容器之间的依赖关系,每个容器的网络、存储等等都定义在一个配置文件中,然后通过一个工具去读取这个配置文件,从而实现快速部署一个应用,方便管理的一个堆docker容器;对于docker-compose来讲,这个配置文件必须交docker-compose.yml,并且通过docker-compose来管理docker容器,它默认就会去找这个配置文件,所以在执行docker-compose命令时,通常我们都是在docker-compose.yml所在目录下执行;

  前文我们聊了下docker私有仓库harbor的搭建,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13061984.html;在上一篇博客的末尾,我们简单聊了下docker-compose启动和停止harbor;docker-compose项目是docker官方的开源项目,负责实现对docker容器集群的快速编排;所谓编排我们可以理解为像ansible里面的"剧本";我们把需要启动的容器,每个容器之间的依赖关系,每个容器的网络、存储等等都定义在一个配置文件中,然后通过一个工具去读取这个配置文件,从而实现快速部署一个应用,方便管理的一个堆docker容器;对于docker-compose来讲,这个配置文件必须交docker-compose.yml,并且通过docker-compose来管理docker容器,它默认就会去找这个配置文件,所以在执行docker-compose命令时,通常我们都是在docker-compose.yml所在目录下执行;

  首先说下安装吧,通常安装方式有两种,第一种方式就是把docker-compose当作python的一个应用来装,用pip安装docker-compose即可;第二种就是yum安装;如下所示

  1、pip安装

[root@docker_node02 ~]# pip install docker-composeDEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-supportCollecting docker-compose Downloading docker_compose-1.26.0-py2.py3-none-any.whl (139 kB)  |████████████████████████████████| 139 kB 61 kB/s Collecting backports.shutil-get-terminal-size==1.0.0; python_version < "3.3" Downloading backports.shutil_get_terminal_size-1.0.0-py2.py3-none-any.whl (6.5 kB)Collecting python-dotenv<1,>=0.13.0 Downloading python_dotenv-0.13.0-py2.py3-none-any.whl (17 kB)Collecting distro<2,>=1.5.0 Downloading distro-1.5.0-py2.py3-none-any.whl (18 kB)Collecting texttable<2,>=0.9.0 Downloading texttable-1.6.2-py2.py3-none-any.whl (10 kB)Collecting six<2,>=1.3.0 Downloading six-1.15.0-py2.py3-none-any.whl (10 kB)Collecting cached-property<2,>=1.2.0 Downloading cached_property-1.5.1-py2.py3-none-any.whl (6.0 kB)Collecting jsonschema<4,>=2.5.1 Downloading jsonschema-3.2.0-py2.py3-none-any.whl (56 kB)  |████████████████████████████████| 56 kB 18 kB/s Requirement already satisfied: backports.ssl-match-hostname<4,>=3.5; python_version < "3.5" in /usr/lib/python2.7/site-packages (from docker-compose) (3.5.0.1)Requirement already satisfied: ipaddress<2,>=1.0.16; python_version < "3.3" in /usr/lib/python2.7/site-packages (from docker-compose) (1.0.16)Collecting subprocess32<4,>=3.5.4; python_version < "3.2" Downloading subprocess32-3.5.4.tar.gz (97 kB)  |████████████████████████████████| 97 kB 14 kB/s Collecting docopt<1,>=0.6.1 Downloading docopt-0.6.2.tar.gz (25 kB)Collecting dockerpty<1,>=0.4.1 Downloading dockerpty-0.4.1.tar.gz (13 kB)Collecting requests<3,>=2.20.0 Downloading requests-2.23.0-py2.py3-none-any.whl (58 kB)  |████████████████████████████████| 58 kB 17 kB/s Requirement already satisfied: PyYAML<6,>=3.10 in /usr/lib64/python2.7/site-packages (from docker-compose) (5.3.1)Collecting docker[ssh]<5,>=3.7.0 Downloading docker-4.2.1-py2.py3-none-any.whl (143 kB)  |████████████████████████████████| 143 kB 15 kB/s Requirement already satisfied: enum34<2,>=1.0.4; python_version < "3.4" in /usr/lib/python2.7/site-packages (from docker-compose) (1.0.4)Collecting websocket-client<1,>=0.32.0 Downloading websocket_client-0.57.0-py2.py3-none-any.whl (200 kB)  |████████████████████████████████| 200 kB 13 kB/s Collecting typing; python_version < "3.5" Downloading typing-3.7.4.1-py2-none-any.whl (26 kB)Collecting functools32; python_version < "3" Downloading functools32-3.2.3-2.tar.gz (31 kB)Collecting attrs>=17.4.0 Downloading attrs-19.3.0-py2.py3-none-any.whl (39 kB)Requirement already satisfied: setuptools in /usr/lib/python2.7/site-packages (from jsonschema<4,>=2.5.1->docker-compose) (0.9.8)Collecting pyrsistent>=0.14.0 Downloading pyrsistent-0.16.0.tar.gz (108 kB)  |████████████████████████████████| 108 kB 14 kB/s Collecting importlib-metadata; python_version < "3.8" Downloading importlib_metadata-1.6.1-py2.py3-none-any.whl (31 kB)Collecting certifi>=2017.4.17 Downloading certifi-2020.4.5.2-py2.py3-none-any.whl (157 kB)  |████████████████████████████████| 157 kB 19 kB/s Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 Downloading urllib3-1.25.9-py2.py3-none-any.whl (126 kB)  |████████████████████████████████| 126 kB 13 kB/s Collecting idna<3,>=2.5 Downloading idna-2.9-py2.py3-none-any.whl (58 kB)  |████████████████████████████████| 58 kB 14 kB/s Collecting chardet<4,>=3.0.2 Downloading chardet-3.0.4-py2.py3-none-any.whl (133 kB)  |████████████████████████████████| 133 kB 22 kB/s Collecting paramiko>=2.4.2; extra == "ssh" Downloading paramiko-2.7.1-py2.py3-none-any.whl (206 kB)  |████████████████████████████████| 206 kB 22 kB/s Collecting contextlib2; python_version < "3" Downloading contextlib2-0.6.0.post1-py2.py3-none-any.whl (9.8 kB)Collecting pathlib2; python_version < "3" Downloading pathlib2-2.3.5-py2.py3-none-any.whl (18 kB)Collecting zipp>=0.5 Downloading zipp-1.2.0-py2.py3-none-any.whl (4.8 kB)Collecting configparser>=3.5; python_version < "3" Downloading configparser-4.0.2-py2.py3-none-any.whl (22 kB)Collecting cryptography>=2.5 Downloading cryptography-2.9.2-cp27-cp27mu-manylinux2010_x86_64.whl (2.7 MB)  |████████████████████████████████| 2.7 MB 15 kB/s Collecting pynacl>=1.0.1 Downloading PyNaCl-1.4.0-cp27-cp27mu-manylinux1_x86_64.whl (964 kB)  |████████████████████████████████| 964 kB 27 kB/s Collecting bcrypt>=3.1.3 Downloading bcrypt-3.1.7-cp27-cp27mu-manylinux1_x86_64.whl (59 kB)  |████████████████████████████████| 59 kB 15 kB/s Collecting scandir; python_version < "3.5" Downloading scandir-1.10.0.tar.gz (33 kB)Collecting cffi!=1.11.3,>=1.8 Downloading cffi-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl (387 kB)  |████████████████████████████████| 387 kB 19 kB/s Collecting pycparser Downloading pycparser-2.20-py2.py3-none-any.whl (112 kB)  |████████████████████████████████| 112 kB 17 kB/s Using legacy setup.py install for subprocess32, since package 'wheel' is not installed.Using legacy setup.py install for docopt, since package 'wheel' is not installed.Using legacy setup.py install for dockerpty, since package 'wheel' is not installed.Using legacy setup.py install for functools32, since package 'wheel' is not installed.Using legacy setup.py install for pyrsistent, since package 'wheel' is not installed.Using legacy setup.py install for scandir, since package 'wheel' is not installed.Installing collected packages: backports.shutil-get-terminal-size, typing, python-dotenv, distro, texttable, six, cached-property, functools32, attrs, pyrsistent, contextlib2, scandir, pathlib2, zipp, configparser, importlib-metadata, jsonschema, subprocess32, docopt, dockerpty, certifi, urllib3, idna, chardet, requests, websocket-client, pycparser, cffi, cryptography, pynacl, bcrypt, paramiko, docker, docker-compose Running setup.py install for functools32 ... done Running setup.py install for pyrsistent ... done Running setup.py install for scandir ... done Running setup.py install for subprocess32 ... error ERROR: Command errored out with exit status 1:  command: /usr/bin/python2 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-kRVwx0/subprocess32/setup.py'"'"'; __file__='"'"'/tmp/pip-install-kRVwx0/subprocess32/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-qwi0Cp/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python2.7/subprocess32   cwd: /tmp/pip-install-kRVwx0/subprocess32/ Complete output (51 lines): /usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'  warnings.warn(msg) running install running build running build_py creating build creating build/lib.linux-x86_64-2.7 copying subprocess32.py -> build/lib.linux-x86_64-2.7 running build_ext running build_configure checking for gcc... no checking for cc... no checking for cl.exe... no configure: error: in `/tmp/pip-install-kRVwx0/subprocess32': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details Traceback (most recent call last):  File "<string>", line 1, in <module>  File "/tmp/pip-install-kRVwx0/subprocess32/setup.py", line 120, in <module>  main()  File "/tmp/pip-install-kRVwx0/subprocess32/setup.py", line 114, in main  'Programming Language :: Python :: Implementation :: CPython',  File "/usr/lib64/python2.7/distutils/core.py", line 152, in setup  dist.run_commands()  File "/usr/lib64/python2.7/distutils/dist.py", line 953, in run_commands  self.run_command(cmd)  File "/usr/lib64/python2.7/distutils/dist.py", line 972, in run_command  cmd_obj.run()  File "/usr/lib/python2.7/site-packages/setuptools/command/install.py", line 53, in run  return _install.run(self)  File "/usr/lib64/python2.7/distutils/command/install.py", line 563, in run  self.run_command('build')  File "/usr/lib64/python2.7/distutils/cmd.py", line 326, in run_command  self.distribution.run_command(command)  File "/usr/lib64/python2.7/distutils/dist.py", line 972, in run_command  cmd_obj.run()  File "/usr/lib64/python2.7/distutils/command/build.py", line 127, in run  self.run_command(cmd_name)  File "/usr/lib64/python2.7/distutils/cmd.py", line 326, in run_command  self.distribution.run_command(command)  File "/usr/lib64/python2.7/distutils/dist.py", line 972, in run_command  cmd_obj.run()  File "/tmp/pip-install-kRVwx0/subprocess32/setup.py", line 41, in run  self.run_command(command)  File "/usr/lib64/python2.7/distutils/cmd.py", line 326, in run_command  self.distribution.run_command(command)  File "/usr/lib64/python2.7/distutils/dist.py", line 972, in run_command  cmd_obj.run()  File "/tmp/pip-install-kRVwx0/subprocess32/setup.py", line 26, in run  raise RuntimeError(configure_command + ' failed.') RuntimeError: sh ./configure failed. ----------------------------------------ERROR: Command errored out with exit status 1: /usr/bin/python2 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-kRVwx0/subprocess32/setup.py'"'"'; __file__='"'"'/tmp/pip-install-kRVwx0/subprocess32/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /tmp/pip-record-qwi0Cp/install-record.txt --single-version-externally-managed --compile --install-headers /usr/include/python2.7/subprocess32 Check the logs for full command output.[root@docker_node02 ~]# 

  提示:安装如果报以上错误,解决办法yum install gcc libffi-devel python-devel openssl-devel -y;docker-compose是python语言研发的,如果你的主机上没有pip 可以先安装python-pip即可;安装python-pip注意先配置好epel源;

[root@docker_node02 ~]# yum install gcc libffi-devel python-devel openssl-devel -yLoaded plugins: fastestmirrorbase                  | 3.6 kB 00:00:00  docker-ce-stable               | 3.5 kB 00:00:00  epel                  | 4.7 kB 00:00:00  extras                 | 2.9 kB 00:00:00  updates                 | 2.9 kB 00:00:00  (1/3): updates/7/x86_64/primary_db          | 2.1 MB 00:00:00  (2/3): epel/x86_64/updateinfo            | 1.0 MB 00:00:03  (3/3): epel/x86_64/primary_db            | 6.8 MB 00:00:05  Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.comResolving Dependencies--> Running transaction check---> Package gcc.x86_64 0:4.8.5-39.el7 will be installed--> Processing Dependency: libgomp = 4.8.5-39.el7 for package: gcc-4.8.5-39.el7.x86_64--> Processing Dependency: cpp = 4.8.5-39.el7 for package: gcc-4.8.5-39.el7.x86_64……省略部分内容Installed: gcc.x86_64 0:4.8.5-39.el7      libffi-devel.x86_64 0:3.0.13-19.el7    openssl-devel.x86_64 1:1.0.2k-19.el7   python-devel.x86_64 0:2.7.5-88.el7   Dependency Installed: cpp.x86_64 0:4.8.5-39.el7      glibc-devel.x86_64 0:2.17-307.el7.1    glibc-headers.x86_64 0:2.17-307.el7.1   kernel-headers.x86_64 0:3.10.0-1127.10.1.el7  keyutils-libs-devel.x86_64 0:1.5.8-3.el7  krb5-devel.x86_64 0:1.15.1-46.el7     libcom_err-devel.x86_64 0:1.42.9-17.el7  libkadm5.x86_64 0:1.15.1-46.el7     libmpc.x86_64 0:1.0.1-3.el7     libselinux-devel.x86_64 0:2.5-15.el7    libsepol-devel.x86_64 0:2.5-10.el7   libverto-devel.x86_64 0:0.2.5-4.el7    mpfr.x86_64 0:3.1.1-4.el7      pcre-devel.x86_64 0:8.32-17.el7     python-rpm-macros.noarch 0:3-32.el7   python-srpm-macros.noarch 0:3-32.el7    python2-rpm-macros.noarch 0:3-32.el7   zlib-devel.x86_64 0:1.2.7-18.el7     Dependency Updated: e2fsprogs.x86_64 0:1.42.9-17.el7    e2fsprogs-libs.x86_64 0:1.42.9-17.el7    glibc.x86_64 0:2.17-307.el7.1    glibc-common.x86_64 0:2.17-307.el7.1    krb5-libs.x86_64 0:1.15.1-46.el7    libcom_err.x86_64 0:1.42.9-17.el7     libffi.x86_64 0:3.0.13-19.el7    libgcc.x86_64 0:4.8.5-39.el7      libgomp.x86_64 0:4.8.5-39.el7    libss.x86_64 0:1.42.9-17.el7      openssl.x86_64 1:1.0.2k-19.el7    openssl-libs.x86_64 1:1.0.2k-19.el7    python.x86_64 0:2.7.5-88.el7     python-libs.x86_64 0:2.7.5-88.el7     zlib.x86_64 0:1.2.7-18.el7     Complete![root@docker_node02 ~]#

  提示:安装好以上依赖包以后,在来安装docker-compose 就没有问题了;

[root@docker_node02 ~]# pip install docker-compose        DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-supportCollecting docker-compose Using cached docker_compose-1.26.0-py2.py3-none-any.whl (139 kB)Requirement already satisfied: backports.shutil-get-terminal-size==1.0.0; python_version < "3.3" in /usr/lib/python2.7/site-packages (from docker-compose) (1.0.0)Requirement already satisfied: python-dotenv<1,>=0.13.0 in /usr/lib/python2.7/site-packages (from docker-compose) (0.13.0)Requirement already satisfied: distro<2,>=1.5.0 in /usr/lib/python2.7/site-packages (from docker-compose) (1.5.0)Requirement already satisfied: texttable<2,>=0.9.0 in /usr/lib/python2.7/site-packages (from docker-compose) (1.6.2)Requirement already satisfied: six<2,>=1.3.0 in /usr/lib/python2.7/site-packages (from docker-compose) (1.15.0)Requirement already satisfied: cached-property<2,>=1.2.0 in /usr/lib/python2.7/site-packages (from docker-compose) (1.5.1)Requirement already satisfied: jsonschema<4,>=2.5.1 in /usr/lib/python2.7/site-packages (from docker-compose) (3.2.0)Requirement already satisfied: backports.ssl-match-hostname<4,>=3.5; python_version < "3.5" in /usr/lib/python2.7/site-packages (from docker-compose) (3.5.0.1)Requirement already satisfied: ipaddress<2,>=1.0.16; python_version < "3.3" in /usr/lib/python2.7/site-packages (from docker-compose) (1.0.16)Collecting subprocess32<4,>=3.5.4; python_version < "3.2" Using cached subprocess32-3.5.4.tar.gz (97 kB)Collecting docopt<1,>=0.6.1 Using cached docopt-0.6.2.tar.gz (25 kB)Collecting dockerpty<1,>=0.4.1 Using cached dockerpty-0.4.1.tar.gz (13 kB)Collecting requests<3,>=2.20.0 Using cached requests-2.23.0-py2.py3-none-any.whl (58 kB)Requirement already satisfied: PyYAML<6,>=3.10 in /usr/lib64/python2.7/site-packages (from docker-compose) (5.3.1)Collecting docker[ssh]<5,>=3.7.0 Using cached docker-4.2.1-py2.py3-none-any.whl (143 kB)Requirement already satisfied: enum34<2,>=1.0.4; python_version < "3.4" in /usr/lib/python2.7/site-packages (from docker-compose) (1.0.4)Collecting websocket-client<1,>=0.32.0 Using cached websocket_client-0.57.0-py2.py3-none-any.whl (200 kB)Requirement already satisfied: typing; python_version < "3.5" in /usr/lib/python2.7/site-packages (from python-dotenv<1,>=0.13.0->docker-compose) (3.7.4.1)Requirement already satisfied: functools32; python_version < "3" in /usr/lib/python2.7/site-packages (from jsonschema<4,>=2.5.1->docker-compose) (3.2.3.post2)Requirement already satisfied: attrs>=17.4.0 in /usr/lib/python2.7/site-packages (from jsonschema<4,>=2.5.1->docker-compose) (19.3.0)Requirement already satisfied: setuptools in /usr/lib/python2.7/site-packages (from jsonschema<4,>=2.5.1->docker-compose) (0.9.8)Requirement already satisfied: pyrsistent>=0.14.0 in /usr/lib64/python2.7/site-packages (from jsonschema<4,>=2.5.1->docker-compose) (0.16.0)Requirement already satisfied: importlib-metadata; python_version < "3.8" in /usr/lib/python2.7/site-packages (from jsonschema<4,>=2.5.1->docker-compose) (1.6.1)Collecting certifi>=2017.4.17 Using cached certifi-2020.4.5.2-py2.py3-none-any.whl (157 kB)Collecting urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 Using cached urllib3-1.25.9-py2.py3-none-any.whl (126 kB)Collecting idna<3,>=2.5 Using cached idna-2.9-py2.py3-none-any.whl (58 kB)Collecting chardet<4,>=3.0.2 Using cached chardet-3.0.4-py2.py3-none-any.whl (133 kB)Collecting paramiko>=2.4.2; extra == "ssh" Using cached paramiko-2.7.1-py2.py3-none-any.whl (206 kB)Requirement already satisfied: contextlib2; python_version < "3" in /usr/lib/python2.7/site-packages (from importlib-metadata; python_version < "3.8"->jsonschema<4,>=2.5.1->docker-compose) (0.6.0.post1)Requirement already satisfied: pathlib2; python_version < "3" in /usr/lib/python2.7/site-packages (from importlib-metadata; python_version < "3.8"->jsonschema<4,>=2.5.1->docker-compose) (2.3.5)Requirement already satisfied: zipp>=0.5 in /usr/lib/python2.7/site-packages (from importlib-metadata; python_version < "3.8"->jsonschema<4,>=2.5.1->docker-compose) (1.2.0)Requirement already satisfied: configparser>=3.5; python_version < "3" in /usr/lib/python2.7/site-packages (from importlib-metadata; python_version < "3.8"->jsonschema<4,>=2.5.1->docker-compose) (4.0.2)Collecting cryptography>=2.5 Using cached cryptography-2.9.2-cp27-cp27mu-manylinux2010_x86_64.whl (2.7 MB)Collecting pynacl>=1.0.1 Using cached PyNaCl-1.4.0-cp27-cp27mu-manylinux1_x86_64.whl (964 kB)Collecting bcrypt>=3.1.3 Using cached bcrypt-3.1.7-cp27-cp27mu-manylinux1_x86_64.whl (59 kB)Requirement already satisfied: scandir; python_version < "3.5" in /usr/lib64/python2.7/site-packages (from pathlib2; python_version < "3"->importlib-metadata; python_version < "3.8"->jsonschema<4,>=2.5.1->docker-compose) (1.10.0)Collecting cffi!=1.11.3,>=1.8 Using cached cffi-1.14.0-cp27-cp27mu-manylinux1_x86_64.whl (387 kB)Collecting pycparser Using cached pycparser-2.20-py2.py3-none-any.whl (112 kB)Using legacy setup.py install for subprocess32, since package 'wheel' is not installed.Using legacy setup.py install for docopt, since package 'wheel' is not installed.Using legacy setup.py install for dockerpty, since package 'wheel' is not installed.Installing collected packages: subprocess32, docopt, dockerpty, certifi, urllib3, idna, chardet, requests, websocket-client, pycparser, cffi, cryptography, pynacl, bcrypt, paramiko, docker, docker-compose Running setup.py install for subprocess32 ... done Running setup.py install for docopt ... done Running setup.py install for dockerpty ... done Attempting uninstall: chardet Found existing installation: chardet 2.2.1 Uninstalling chardet-2.2.1:  Successfully uninstalled chardet-2.2.1Successfully installed bcrypt-3.1.7 certifi-2020.4.5.2 cffi-1.14.0 chardet-3.0.4 cryptography-2.9.2 docker-4.2.1 docker-compose-1.26.0 dockerpty-0.4.1 docopt-0.6.2 idna-2.9 paramiko-2.7.1 pycparser-2.20 pynacl-1.4.0 requests-2.23.0 subprocess32-3.5.4 urllib3-1.25.9 websocket-client-0.57.0[root@docker_node02 ~]# docker-compose --versiondocker-compose version 1.26.0, build unknown[root@docker_node02 ~]# 

  提示:如果能够看到docker-compose的版本信息,就表示docker-compose安装好了;

  2、yum 安装

[root@docker_node01 ~]# yum install -y docker-composeLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.comResolving Dependencies--> Running transaction check---> Package docker-compose.noarch 0:1.18.0-4.el7 will be installed--> Finished Dependency ResolutionDependencies Resolved================================================================================================= Package     Arch    Version     Repository  Size=================================================================================================Installing: docker-compose    noarch    1.18.0-4.el7    epel    222 kTransaction Summary=================================================================================================Install 1 PackageTotal download size: 222 kInstalled size: 1.1 MDownloading packages:docker-compose-1.18.0-4.el7.noarch.rpm         | 222 kB 00:00:00  Running transaction checkRunning transaction testTransaction test succeededRunning transaction Installing : docker-compose-1.18.0-4.el7.noarch           1/1 Verifying : docker-compose-1.18.0-4.el7.noarch           1/1 Installed: docker-compose.noarch 0:1.18.0-4.el7               Complete![root@docker_node01 ~]# docker-compose -vdocker-compose version 1.18.0, build 8dd22a9[root@docker_node01 ~]#

  提示:本人推荐使用yum安装;从上面的过程来看yum是最方便最简洁的;

  接下来我们来构建一个docker-compose.yml配置文件,然后使用docker-compose来管理启动

[root@docker_node01 docker_compose_project]# pwd/root/docker_compose_project[root@docker_node01 docker_compose_project]# lsdocker-compose.yml[root@docker_node01 docker_compose_project]# cat docker-compose.yml version: "3"services: web1: image: nginx:1.14-alpine ports:  - "80:80"[root@docker_node01 docker_compose_project]# 

  提示:以上docker-compose.yml表示启动一个容器,并暴露端口;docker-compose.yml这个文件需要注意空格;每一级的缩进必须相同,否则会报错;docker-compose.yml中主要就是两个重要的概念,服务(services)和项目(project);所谓服务就是一个应用容器,实际上也可以包含若干运行相同镜像的容器示例;项目就是由一组关联的应用容器组成的一个完整业务单元(若干服务共同服务组成)

  启动docker-compose.yml中定义的服务

[root@docker_node01 docker_compose_project]# lsdocker-compose.yml[root@docker_node01 docker_compose_project]# docker imagesREPOSITORY   TAG     IMAGE ID   CREATED    SIZE[root@docker_node01 docker_compose_project]# docker ps -aCONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES[root@docker_node01 docker_compose_project]# docker-compose up -dPulling web1 (nginx:1.14-alpine)...1.14-alpine: Pulling from library/nginxbdf0201b3a05: Pull complete3d0a573c81ed: Pull complete8129faeb2eb6: Pull complete3dc99f571daf: Pull completeDigest: sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7Status: Downloaded newer image for nginx:1.14-alpineCreating dockercomposeproject_web1_1 ... done[root@docker_node01 docker_compose_project]# docker imagesREPOSITORY   TAG     IMAGE ID   CREATED    SIZEnginx    1.14-alpine   8a2fb25a19f5  14 months ago  16MB[root@docker_node01 docker_compose_project]# docker ps -aCONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES6fcb757fdace  nginx:1.14-alpine "nginx -g 'daemon of…" 7 seconds ago  Up 6 seconds  0.0.0.0:80->80/tcp dockercomposeproject_web1_1[root@docker_node01 docker_compose_project]# 

  提示:可以看到我们直接使用docker-compose up -d 就可以直接启动为一个nginx容器;这里需要注意一点的是在执行docker-compose命令必须要在docker-compose.yml所在目录执行。因为docker-compose这个命令会在在当前目录查找docker-compose;然后根据docker-compose.yml文件中定义的services来启动容器;docker-compose up表示创建容器并运行 -d表示把后台运行容器(不占据当前终端);

  停止docker-compose定义的服务

[root@docker_node01 docker_compose_project]# docker ps CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES46b62e878cf9  nginx:1.14-alpine "nginx -g 'daemon of…" 3 minutes ago  Up 8 seconds  0.0.0.0:80->80/tcp dockercomposeproject_web1_1[root@docker_node01 docker_compose_project]# docker-compose stopStopping dockercomposeproject_web1_1 ... done[root@docker_node01 docker_compose_project]# docker ps CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES[root@docker_node01 docker_compose_project]# 

  启动docker-compose定义的服务

[root@docker_node01 docker_compose_project]# docker psCONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES[root@docker_node01 docker_compose_project]# docker-compose startStarting web1 ... done[root@docker_node01 docker_compose_project]# docker psCONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS    NAMES46b62e878cf9  nginx:1.14-alpine "nginx -g 'daemon of…" 3 minutes ago  Up 2 seconds  0.0.0.0:80->80/tcp dockercomposeproject_web1_1[root@docker_node01 docker_compose_project]# 

  测试:用浏览器访问宿主机的80,看看是否能够访问到容器的nginx服务?

  提示:可以看到我们访问宿主机的80是能够正常访问的;说明我们在docker-compose.yml文件中定义的容器和暴露的端口都已正常启动并把对应的端口暴露给宿主机;

  示例:自定义容器名称

  提示:container_name表示指定运行容器的名称;

  提示:如果默认不指定容器名称,docker会默认命名为项目名称_+服务名称+第几个容器类似这种逻辑;项目名称就是docker-compose.yml文件所在目录名称,通常它会把"_","-"下划线中横线都去掉;

  验证:停止现有容器,重新启动容器,看看容器名称是否更改?

  提示:更改了docker-compose.yml文件后,必须使用up 命令来重新读取docker-compose.yml文件,根据文件中的内容重新启动运行容器;如果使用start来启动,我们在docker-compose.yml中新定义的内容是不会生效的;

  示例:查看容器进程

  提示:docker-compose ps 显示的信息要比docker ps 显示的信息更为精简;

  示例:从docker compose启动多个容器

[root@docker_node01 docker_compose_project]# cat docker-compose.yml version: "3"services: web1: container_name: myweb1 image: nginx:1.14-alpine ports:  - "80:80" web2: container_name: myweb2 image: nginx:1.14-alpine ports:  - "81:80"[root@docker_node01 docker_compose_project]# 

  提示:以上docker-compose.yml文件定义了两个服务,web1和web2;这里需要注意一点服务名称或id不能相同;容器的名称也必须是唯一的;

  验证:停止现有容器,重新读取docker-compose.yml文件,看看是否会启动两个nginx容器?

  提示:可以看到myweb2也正常启动了,并把容器内部的80映射为宿主机的81端口;

  验证:用浏览器访问宿主机的81端口,看看是否能够访问得到?

  提示:可以看到81端口是可以正常访问的;

  示例:定义数据卷挂载

  提示:以上红框中的内容表示把宿主机上的/data/nginx/目录挂载到容器内部的/usr/share/nginx/html目录下;

  重启容器

  提示:可以看到容器内部已经可以访问我们对应宿主机上的文件;

  验证:用浏览器访问宿主机的80看看是否能够访问到我们提供的index.html页面?

  提示:用浏览器访问可以正常访问到宿主机挂载到容器内部的index.html文件内容;

  示例:重启单个服务

  提示:docker-compose管理的是以服务为单位,所以我们管理单个服务需要指定服务端名称,而非容器的名称;

  示例:重启所有服务

  提示:重启所有服务docker-compose会自动读取docker-compose.yml文件中定义的服务,来重启容器;

  示例:利用docker-compose一件部署wordpress

[root@docker_node01 wordpress]# cat docker-compose.yml version: '3.3'services: wordpress:  depends_on:  - db  image: wordpress:latest  volumes:  - wordpress_files:/var/www/html  ports:  - "80:80"  restart: always  environment:  WORDPRESS_DB_HOST: db:3306  WORDPRESS_DB_NAME: wordpress  WORDPRESS_DB_USER: wordpress  WORDPRESS_DB_PASSWORD: admin123.com db:  image: mysql:5.7  volumes:  - db_data:/var/lib/mysql  restart: always  environment:  MYSQL_ROOT_PASSWORD: my_db_root_password  MYSQL_DATABASE: wordpress  MYSQL_USER: wordpress  MYSQL_PASSWORD: admin123.comvolumes: wordpress_files: db_data: [root@docker_node01 wordpress]# 

  提示:version表示配置文件版本,depends_on表示指定依赖的服务列表;restart指令表示重启策略,restart:always就表示只要出现问题就重启;environment表示定义传给容器的环境变量;volumes:表示定义两个存储卷。这里是直接定义两个卷的名字,并没有指定对应目录;这种卷就是docker自身管理的卷,通常在/var/lib/docker/volumes/服务名_+卷名/_data/;以上就启动两个服务,wordpress依赖db服务;这里需要注意一点,数据库容器启动必须要传环境变量给容器,比如MYSQL_ROOT_PASSWORD就表示给mysql设定root密码;

  验证:停止nginx容器,启动wordpress

[root@docker_node01 wordpress]# pwd/root/wordpress[root@docker_node01 wordpress]# lsdocker-compose.yml[root@docker_node01 wordpress]# cd [root@docker_node01 ~]# cd docker_compose_project/[root@docker_node01 docker_compose_project]# lsdocker-compose.yml[root@docker_node01 docker_compose_project]# docker-compose stopStopping myweb2 ... doneStopping myweb1 ... done[root@docker_node01 docker_compose_project]# cd ../wordpress/[root@docker_node01 wordpress]# pwd/root/wordpress[root@docker_node01 wordpress]# lsdocker-compose.yml[root@docker_node01 wordpress]#docker-compose up -dCreating network "wordpress_default" with the default driverCreating volume "wordpress_wordpress_files" with default driverCreating volume "wordpress_db_data" with default driverPulling db (mysql:5.7)...5.7: Pulling from library/mysql8559a31e96f4: Pull completed51ce1c2e575: Pull completec2344adc4858: Pull completefcf3ceff18fc: Pull complete16da0c38dc5b: Pull completeb905d1797e97: Pull complete4b50d1c6b05c: Pull completed85174a87144: Pull completea4ad33703fa8: Pull completef7a5433ce20d: Pull complete3dcd2a278b4a: Pull completeDigest: sha256:32f9d9a069f7a735e28fd44ea944d53c61f990ba71460c5c183e610854ca4854Status: Downloaded newer image for mysql:5.7Pulling wordpress (wordpress:latest)...latest: Pulling from library/wordpress8559a31e96f4: Already existse0276193a084: Pull completeeb2d00c10344: Pull completef54006e0dc29: Pull completee0d3d1244592: Pull complete3a60f364b0c5: Pull complete3e309988c00b: Pull completebff5c52c95f4: Pull completec9086065e896: Pull completef07bb8dcc770: Pull complete7ad826bc3623: Pull complete0f6a0743d973: Pull complete43b190adf511: Pull completecc02e4c247ac: Pull completecd5c5e392dc3: Pull completea029df01fe2d: Pull complete6c942bd52caf: Pull complete804bbda23122: Pull completebb70a73ffdf7: Pull complete9c44164d321c: Pull completeba02d5b98827: Pull completeDigest: sha256:602ea0959040cd101e5e6923474612a15f9dd330ab45ceaec4e07dc762d674c0Creating wordpress_db_1  ... doneCreating wordpress_db_1  ... Creating wordpress_wordpress_1 ... done[root@docker_node01 wordpress]#docker psCONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS     NAMEScf61629c8f36  wordpress:latest "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp wordpress_wordpress_104cc6dcddd7d  mysql:5.7   "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060/tcp wordpress_db_1[root@docker_node01 wordpress]# 

  提示:可以看到wordpress和mysql容器都跑起来了;

  验证:用浏览器访问宿主机80,看看是否访问到wordpress?

  提示:可以看到wordpress是可以直接访问的,并且不需要我们再设置数据了,因为我们在docker-compose.yml中设置好了,这里直接安装即可;

 

  通过上面的演示,我们利用docker-compose就可以轻松部署一个应用,我们只需要在docker-compose.yml中定义好每个容器间的依赖关系,存储卷等等一系列关系,然后通过docker-compose 直接就可以根据我们定义的关系来启动容器;以上就是docker-compose的简单示例和使用说明;有关docker-compose.yml中指令的说明可以参考官方文档https://docs.docker.com/compose/compose-file/#service-configuration-reference;


大批Listing突遭下架,这些词都不能用了!

大批Listing突遭下架,这些词都不能用了!

最近几天,亚马逊上多个链接突然变狗,原因是被查出带有杀虫剂、医疗用品、成人用品、毒品等违规字眼,据美国相关部门最新消息,目前多个词都不能再用了,卖家需谨慎。

多个listing已被下架,敏感词危机又来了

昨天,一位亚马逊卖家反映,其一个正规售卖的链接突然变狗,卖家一头雾水便向客服咨询,被告知是listing中添加了类似Cocaine、Heroin、Syphilis、Morphia、Opium、Coca Leaves等违规词。而近一周,平台上链接因敏感词变狗的案例不胜枚举:

周六,一个listing 被恶意添加爆炸物、病毒等词链接变狗,前天申诉回来又被标为成人用品,很无奈……

先是改五点成病毒爆炸品,捞回来后又是成人用品,这些人太*了;

我的链接也变狗了,被添加医疗用品;

违规词倒是没被添加,但有产品被恶意标记成人用品;

根据卖家的反馈,链接因敏感词变狗一事在上周六也就是6月6日集中爆发过一轮。当时,多个链接被判为杀虫剂或农药产品,其中一位卖家的爆款不幸被卷入其中。

这位卖家表示,其日出两万美金的爆款突然变狗,而在此之前,无论是后台还是邮箱,该卖家都没有收到任何通知,listing直接被删除,除去被同行恶搞的可能性,其初步判断被判定为杀虫剂产品或者农药产品。该卖家晒出的销售数据显示,其日销量达500多,日销售额超2万美金。

3905.png

另一位卖家表示也遇到了同样的情况:后台显示商品信息被删除,开case客服回复应该是杀虫剂或FDA关键词误删,可以自己在后台模板上传或申诉,其中前者恢复较快。

之后,前文爆款受损卖家收到客服回复,其产品确被判为杀虫剂,后台显示可售可编辑,但前台变狗,尝试用模板刷新,但依然未能解决。

有卖家帮忙分析这一情况:1、如果真的是杀虫剂、农药,这样还不算难;2、不能排除被恶搞,找服务商搞竞争对手的不在少数;3、找出具体问题具体分析,能申诉最好,服务商有多种恢复链接的的服务,有些可能对账号有风险;4、翻新链接能回来,但是没有review和权重,对于如此链接来说损失巨大。

在这类事件中,链接直接被blocked而不是inactive情况十分严重,也因此引起了不少卖家的重视,

除上文所说的一些敏感词之外,卖家透露,违规词包括但不限于:Ear Candles Cocaine Heroin Syphilis Morphia Opium Coca Leaves Pinzon Synthol Synthrol or Swethol Posing Oil,令人费解的是,肉类也成为此次风波中的一个敏感词汇。

巧合?EPA通知亚马逊和eBay下架杀虫剂和COVID-19相关产品

在国内卖家反馈大批Listing被强行插入农药、疫情等敏感词之时,亚马逊和eBay接到通知,下架杀虫剂和治疗新冠肺炎的相关产品。这只是巧合吗?

外媒消息,周四美国环保署(EPA)向亚马逊和eBay发出通知,要求两家电子商务巨头停止销售杀虫剂和有问题的COVID-19产品。

该机构表示,第三方或直销商将这些"未注册、贴错标签或限制使用"的杀虫剂和冠状病毒相关的产品列在亚马逊和eBay的平台上。

环保局局长安德鲁·惠勒在周四的一份声明中说:"这些向亚马逊和eBay发出的停售令,显示了特朗普政府继续致力于保护美国人的健康和安全。我们对生产商声称的产品功效和安全性主张保持警惕。"

3906.png

惠勒表示:"我们有责任就可能对消费者造成伤害的未注册产品继续与公众进行透明沟通,并立即将这些产品撤出市场。

惠勒与亚马逊、eBay和其他电子商务网站就其平台上普遍存在的未注册、有问题和潜在危险的产品进行了讨论。美国环保署表示,尽管进行了讨论,但亚马逊和eBay未能持续屏蔽"未注册、商标错误或限制使用的杀虫剂"和COVID-19的产品。

在EPA宣布之时,Virus Shut Out仍在eBay上列出,而二氯甲烷在亚马逊和eBay两个平台上都有列出,但没有与冠状病毒相关的产品。

亚马逊发言人称,公司拥有"主动屏蔽关于COVID-19的不准确声明"的系统,并且"已经下架了有问题的产品"。

eBay表示:"在COVID-19期间,我们已采取重大措施,将不安全、虚假健康宣传或违反我们零容忍价格欺诈政策的产品从市场上封禁或迅速删除。"

EPA还表示,一些未注册或商标错误的杀虫剂和COVID-19产品在亚马逊和eBay上的描述包含如下:

"Kills COVID-19"

"Complete sterilization including the current pandemic virus"

"Coronavirus disinfectant"

"2020 Coronavirus Protection Coronavirus Protection Clearance Sale"

"A Powerful, Green, Non-Toxic Solution Proven to Inactivate our current viral strain"

"Epidemic Prevention""Efficient disinfection to prevent the spread of disease"

"Help keep your family and those you care for healthy"

"Nontoxic causes no permanent injuries"

"Ingredients are biodegradable and have no harmful impact on the environment"

"There is no damage to the environment"

"You can easily purify the living environment"

"Safe for all people using"

"Gentle to Child & Pets"

"Chemical Free"

值得注意的是,早在今年4月,美国环保署就对包括Facebook、eBay、Shopify、Qoo10、JoyBuy.com、Wish.com和banggood.com在内的一些电商平台发出了销售非法消毒剂产品的警告。

多位卖家猜测:强插关键词是人为恶搞

在警告之后,昨天EPA直接发通知,要求亚马逊和eBay停售杀虫剂和有问题的COVID-19产品。这下以上提到的词语还有之前平台禁用的一些词一下子变得异常敏感。这些敏感词致使国内大批卖家的Listing被下架。

据知情卖家反馈,这次Listing敏感词是被强行加入的。也就是说很大一部分卖家可能是被恶搞了。有受害卖家称,自己的出单还不错的产品,先是关键词被删除,然后被添加了一些杀虫剂、涉毒等不相关的敏感词,然后触发关键词审核之后,Listing无端变狗。这些操作很可能来自VC或者一些没底线的服务商。

Listing被下架之后,卖家们都急于恢复。业内卖家称可尝试进行这样操作:首先,删除过去的描述;其次,下载产品模板,选择产品类目;再次,编辑ASIN SKU,在需要修改的地方填写内容;最后,上载产品模板,导入确认。这样做之后,有些Listing能很快恢复。



文章来源:https://www.ikjzd.com/home/123674,更多跨境电商运营技巧:https://www.ikjzd.com

直播带货火出国门!剖析速卖通网红直播项目AliExpress Connect

直播带货火出国门!剖析速卖通网红直播项目AliExpress Connect


直播带货火出国门!剖析速卖通网红直播项目AliExpress Connect

据了解到,作为阿里巴巴全球化战略的排头兵,速卖通尝试将阿里巴巴在中国已经非常成熟成功的直播带货模式带到海外,促进海外社交电商生态的发展和零售业的变革。据悉,速卖通新版直播于2019年7月上线,已有来自俄罗斯、西班牙、法国等多个国家的时尚达人、博主,分别用英语、俄语、西班牙语、葡萄牙语、法语、意大利语、波兰语、乌克兰语等8国语言进行直播。至今已向全球用户提供了一万多场直播秀,直播过程中互动数超过6000万次。速卖通直播多以时尚服饰穿搭、模特走秀、数码评测、珠宝展示、家电功能演示为主。

AliExpress Connect平台的四种直播模式

全球速卖通直播网红孵化项目负责人王鹏表示,最初涉及AliExpress Connect这个平台的初衷,是希望更好的把商家和推广者联系起来。在这基础上,速卖通从去年开始做了一些准备工作,一直到今年上了PC版和无线版。

据其介绍,目前AliExpress Connect平台总共有如下四种直播模式:

1、商家自播:由商家自行发起的直播;官方会提供全套的相关教程和一定的流量扶持;直播完整筹备流程由商家产出,商家在过程中无需向平台支付任何费用。主播可以是商家自己的员工或者自己的主播资源。

2、达人直播:通过速卖通平台寻找的达人主播进行直播,商家需要根据与达人的沟通情况支付一口价或者CPS佣金进行直播。商家需要提供样品的寄样和达人的直播成本。(不同达人的专业度以及粉丝的量级不同)

3、机构直播:通过速卖通平台合作的一些国内外机构,进行专场或者多品牌的混播;该类直播适用于店铺的特殊活动(如上新或者新品发布或者店铺周年庆等)或者平台营销节点的活动直播。

4、平台型专业内容:在大促或者平台营销节日中,由平台官方发起并由专业内容制作团队承接的直播内容。该类直播内容会有官方设计相关主题和内容形式,面向行业TOP商家进行定向招商参与,入选的商家仅需提供货品寄样。

目前,速卖通对商家与达人两端均不收取任何费用。"AliExpress Connect更像一个撮合平台,无论是商家端,还是达人、机构端,都可以借助平台寻找到合作,平台还会根据直播效果提供数据支持,确保商家与达人们相互认可,保证达人为商家更好地带货,同时达人也能够获取丰厚的报酬。"王鹏告诉。

国内成熟的直播带货,是否可以完全复制到海外?

李佳琦和薇娅的成功,以及当下明星直播带货的火热,让众多跨境电商从业者也跃跃欲试。然而,国内现已成熟的直播带货,能否完全复制到海外还是一个问题。

速卖通直播业务负责人石生表示,海外用户到底适合什么样的直播,喜欢看什么样的内容,速卖通在去年一年做了很多的尝试,从商家带货式的直播,到达人带货的直播,以及PGC泛娱乐化的直播类型,全部都已经尝试过了。

"我们发现海外用户喜好真的很多元化,因此现在我们开始做海外人群的用户画像,以及喜好度的数据分析,进而去了解海外到底适合什么样的直播的类型,也方便再去改进和优化我们的内容。所以,目前还是以多元化的互动形式,泛娱乐的形式,以及商家自己带货形式的直播为主。"石生表示,"内容上的差异是一方面,另一个方面是观看直播的用户需求差异。首先,国外的用户很多都是过来看低价和折扣商品,所以接下来要通过产品迭代升级的方式给到用户带来更多适合他们当地折扣需求的直播内容。同时,服务型的直播,比如海外仓直播,这也是当地用户非常喜欢的。"

速卖通商家中台负责人秦清补充解释,当时在做淘宝直播的时候,大部分是明星带货(明星+品牌),还有就是网红。但是现在海外的用户相比来说更喜欢互动,不管是游戏活动还是社交玩法,这都与淘宝或者国内的直播用户完全不同。不过,秦清也跟强调称,目前速卖通上的直播还是处于初级阶段,大部分仍需要主播调节气氛带动消费者。同时,直播带货在海外市场仍然还是比较新兴的方式,是需要一个用户心智培养的过程。

据了解到,速卖通直播目前的用户画像主要是35岁左右已婚已育的主妇,以及爱时尚的中年男性,其中女性比例偏少,男性偏多。数据显示,速卖通上消费者观看直播最喜爱的货品类型是手机通讯、美容健康、消费电子、家居、家电。而从直播场热卖的商品维度来看,近期比较火爆的是几个品牌新机的直播发布,包括小米和优米等品牌;另外,像假发、婴儿手推车、服饰鞋包、服饰鞋包也是在直播中成交不错的类目。


干货| 亚马逊Listing参考公式

干货| 亚马逊Listing参考公式

一条listing需要包含哪些?

高品质的产品

好的品质是每个平台都强调的。但对于亚马逊更重要,根据国外媒体统计,亚马逊平台的消费者,整体消费水平普遍高于Ebay平台的消费者。在美国消费者的心里,Amazon和Ebay的认知类似于中国消费者对天猫和淘宝的认知,认知不同,决定了消费者对产品品质的期望也不同,在亚马逊上,卖家可以接受高一点的价格,当然,也希望获得较高的品质。

适中的价格

除了同类产品同款产品情况下的价格适中,还有指选品不要选太高价格的产品,更不要选太低价格的产品。太高的价格,消费群体有限,没有量的支撑,打造爆款不易,同时,价格高成本高,当然,备货资金压力大,而价格太低的产品,比如$0.99包邮,即便有销量,没有利润,就是耍流氓行为,踩西瓜皮的"成功"。

专精的筛选

亚马逊不能靠铺货取胜,要打造爆款,那么,在选品上一定要做到专精筛选。专,是用心的专注,精,是精通供应链和商品。赢商荟老魏在谈到选品和运营时说:"1厘米宽,100公里深",持续地做到专精,就是在亚马逊平台获取利润的法宝。

标题组成要素

参考公式:

关键词+品牌+亮点+适用范围+产品特性(材质/尺寸/颜色等)

按照以上顺序,把其要素写详细,让你商品名称中的每个词汇都可以独立被搜寻,提高出现在搜索结果内的几率。

1、善用关键字,创造高浏览量

关键词包含(宽泛、精准、长尾)关键词。在标题的设置中,关键词选择一定要精准,为了涵盖更多的搜索,标题中不妨加入相关度较高的宽泛关键词和长尾关键词。

比如Watches是一个宽泛关键词,Men's Watches是一个精准关键词,而Men's Military Watches(男人军用手表)则是一个长尾关键词,随词语范围缩小,有进一步精准趋势。收集整理这三类关键词,根据实际筛选最有效词语,布局在Listing标题中。

如何选择好的关键字?

1、因地制宜

关键词要符合外国人的语言习惯(产品特性、亮点等也一样),可参考当地门户网站,模仿外国出名的购物网站产品标题。

在这些网站上搜索跟自己类似的产品,看别人的标题是什么,一般都是比较符合外国人搜索习惯,同时也可以把买家的评论作为参考。

2、选择搜寻量最多的关键字

如果不知道外国人Google、Amazon搜索引擎热搜的关键词是什么,可使用关键词分析工具。它能帮你挖掘谷歌以及亚马逊卖家当前热搜关键词。

3、观察参考其他卖家的标题

借助多个竞争对手的标题来作为参考,观察Amazon上人气卖家常使用的关键字,逐层过滤筛选。

2.品牌

现在亚马逊越来越注重品牌,很多流量重点倾斜品牌卖家,也可直接防止被人跟卖。虽然之前一直强调:重Listing,轻店铺(现在也是重listing),但有品牌的卖家,可以对自己店铺进行装修和编辑。

3.适用范围

能引导客户正确的购买行为

相对于3C消费电子产品来说,很多产品是有支持设备对象(兼容性)。通常支持设备用连接词for,后面就是该产品所支持的相关设备。

4.产品特性

标题最后一部分基本补充产品相关的材质、尺码或者颜色信息即可,丰富产品信息,从而提高买家对产品的认知度。

5.不可忽视的要点

亚马逊官方指导意见:

1.亚马逊标题限制为200字符,也就是15-20个单词之间,原则上一般不超过15个单词

2.实词首字母大写,虚词如 in/with/the/and/or等不大写

3.捆绑出售的用Pack of 3或Pack-3来表示

4.数字用阿拉伯数字,如 写"5"不写Five

好的标题不应该包含下列元素:

1.价格、运费

2.卖家名称、电邮、电话号码等信息

3.折扣打折信息,如:free shipping/ best sale/great promotion/new arrival / 2017 fashion

4.主观形容词,如great/awesome /good qualit/NO.1

5.任何特殊字符或符号出现,如: ,#,$,&,* etc

6.别人的品牌

7.夸大宣传,虚标各种数据。典型产品如移动电源毫安、可充电电池容量等


来源:跨境无货源运营


文章来源:https://www.ikjzd.com/home/123665,更多跨境电商运营技巧:https://www.ikjzd.com

iOS快手面经(已拿offer)送给准备面试大厂的你

iOS快手面经(已拿offer)送给准备面试大厂的你


背景

过完年来北京之后,有准备看看机会,也是想了解下市场行情。简历没有投太多,只定向投了头条教育部门、抖音、快手、阿里,这些公司。

头条和阿里的简历都没过,肯定是亮点太少吧。只有快手简历过了,快手是三轮技术面+一轮HR面,前两轮技术都比较顺利,到第三轮却栽了,很痛心o(╥﹏╥)o。目前就不考虑换工作了,等下半年再说了,接下来的时间再好好精炼一下。

快手是视频面试,不支持周末,但是可以选择晚上时间,我这几次都是定在了晚上九点。视频面试是通过牛客网进行的,以下是我还记得下来的各轮面试题,对于一些iOS基础知识就不做解答了。

一面

1、用递归写一个算法,计算从1到100的和。

func sum(value: Int) -> Int { if value <= 0 {  return 0 } var number = value return value + sum(value: number - 1)}// 计算过程let result = sum(value: 100)print(result)

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:761407670 进群密码博客,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

 

写完算法之后又围绕着问了几个问题,都是算法基础:

  • 算法的时间复杂度是多少
  • 递归会有什么缺点
  • 不用递归能否实现,复杂度能否降到O(1)

2、property的作用是什么,有哪些关键词,分别是什么含义?

3、父类的property是如何查找的?

4、NSArrayNSDictionary应该如何选关键词?

5、copymuteCopy有什么区别,深复制和浅复制是什么意思,如何实现深复制?

6、用runtime做过什么事情?runtime中的方法交换是如何实现的?

7、讲一下对KVC合KVO的了解,KVC是否会调用setter方法?

8、__block有什么作用

9、说一下对GCD的了解,它有那些方法,分别是做什么用的?

10、对二叉树是否了解?

面试官是想接着问这方面的问题的。我当时说了不了解,然后就没有后续了。

二面

1、ARC和MRC的区别,iOS是如何管理引用计数的,什么情况下引用计数加1什么情况引用计数减一?

2、在MRC下执行[object autorelease]会发生什么,autorelease是如何实现的?

3、CoreAnimation是如何绘制图像的,动画过程中的frame能否获取到?

4、谈一下对Runlop的了解?

5、OC如何实现多继承?

这个当时没有答好。其实借助于消息转发,protocol和类别都可以间接实现多继承。

6、对设计模式有什么了解,讲一下其中一种是如何使用的。

7、有没有哪个开源库让你用的很舒服,讲一下让你舒服的地方。
我这里说了RxSwift中的观察者模式,和响应式编程。然后面试官问,如果要用OC实现一套RxSwift那样的逻辑应该怎么做。我回答的是结合KVO,将一些需要观察的属性,通过KVO进行监听,然后通过block回调出来。

8、一张100*100,RGBA的png图像解压之后占多大内存空间。
RGBA > FFFFFFFF > 4字节
所以会占用:(100 * 100 * 4) / 1024 = 39KB

9、算法题

题目:给定一个个数字arr,判断数组arr中是否所有的数字都只出现过一次。

这个并没有要求写出来,说是提供思路就行了。我当时给的方案是在便利数组的时候,用一个字典把便利的元素存起来,如果在后面的便利过程中新元素在字典中存在过就说明,有重复数字出现。时间复杂度是O(n)。

当时也问了有没有办法进行优化,我当时想到了将数组转成Set,然后和原数组比较,两个集合的数量是否变化。

10、因为我跟他介绍自己Swift用的多一些,然后问了些Swift跟OC的区别,各自的优缺点。

11、为什么离职,有什么职业规划。

三面

1、给定一个Int型数组,用里面的元素组成一个最大数,因为数字可能非常大,用字符串输出。

输入: [3,30,34,5,9]输出: 9534330

这个是leetcode的179题,难度中等。面试官让先说思路,再去做题。事先说一下这个题我没有做过。当时的思路是用冒泡法进行排序,排序的前提是将较少位数的数字进行循环补齐,例如3和30的比较,变成33和30的比较,34和4的比较变成34和44的比较,然后将结果从大到小整合成字符串输出。

但是做题是却发现没那么简单,位数的补齐对于2位和3位数的比较还需要求位数的最小公倍数,将他们都转成6位数才能比较。在挣扎了5分钟做了就做罢了。

后来再去做这道题,其实这就是一个排序而已,只不过他的规则是按高位优先级更高的原则,而这一点跟字符串的比较保持一致,如果再加一些Swift的高阶函数,就可以写成:

func largestNumber(_ nums: [Int]) -> String { let sort = nums.map {"\($0)"}.sorted { (lStr, rStr) -> Bool in  return lStr + rStr > rStr + lStr } let result = sort.joined() if result.prefix(1) == "0" {  return "0" } else {  return result }}

2、项目中有这么一个方法func findfile(dir: String suffix: String) -> [String] ,可以通过输入文件夹目录,和后缀检索出所需的文件。

例如需要在某个文件中检索txt文件或者mp4文件,那就传入dir和suffix就行了。现在又有一些需求,例如需要检索utf8格式的txt或者h264编码的mp4,也会有一些例如查找最近一周更新过的文件这样的需求,你如何优化这个类,让它满足这些情况?

我首先想到的是这么多需求不可能一个方法就完成,需要根据不同场景拆出不同的方法,但是这些同属于文件操作,会有一个共同使用的方法就是检索文件。这个方法需要传入文件目录,然后递归的返回当前目录所有文件路径。外部不同场景的调用逻辑就用一个enum完成,不同值对应相同范围的不同种类。

面试官比较关注内部共用的文件检索怎么写,他说子文件如果过多怎么办,如何优化。我有点懵,查找文件至少是要遍历一遍的,子文件过多,这个应该是没法优化的啊。中间卡了一段时间,后来他给了提示说是不是可以用block实现,将文件路径返回出去,由外部决定当前文件是否可用,最终外部的调用类是这个样子。

max-width: 100%;">//我的方案//func findDir(_ dir: String) -> [String]//block方案func findDir(_ dir: String, block: ((String) -> Bool))

我想来确实没毛病,用block返回内容至少不会将该目录的所有文件都由一个对象持有,而前面一堆的铺垫其实也都是为验证block方案的好处。

其实事后想下这个问题没啥难的,这种写法自己也有写过,但当时就是没想起来,可能前面一圈的铺垫给我带偏了吧,说亏也不亏,以后多多努力吧。

总结

整体来看,快手的面试题跟我在别处看到的iOS面试题对比要简单些,一面主要是基础知识,二面考察更全面一些,更多让自己谈一些对技术的理解,三面则是更偏实践一些。

算法虽然三轮都有,但相对比较简单,即使写不出来,有思路也是可以的。当然写出来肯定是加分项,所以大家准备面试时,应该都看一下。算法相关的,排序,数组,二叉树,这几类是重点。

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:761407670 进群密码 博客 ,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!

Payoneer全球跨境电商指数报告:中国Q1收入同比增长25%

Payoneer全球跨境电商指数报告:中国Q1收入同比增长25%

日前,国际支付服务商Payoneer派安盈发布2020年第一季度全球跨境电商指数报告。数据显示,中国、英美、法国、越南、韩国、印度2020年第一季度的跨境电商销售额与去年同期相比均呈现逆势增长。其中,中国跨境电商收入同比增长25%,稳居全球跨境电商市场榜首,多数卖家对未来市场发展表示乐观。

第一季度全球跨境电商指数报告显示,疫情之下全球电商市场危与机并存。全球电商市场面临的主要挑战来自全球物流和供应链断裂、订单大幅减少、消费者对部分商品类别,例如奢侈品的需求低迷等。

进入2020年第二季度,中国跨境电商行业出现了复苏迹象,企业复产复工,中国政府出台了一系列促进市场回暖的措施,包括推动建设46个综合试验区、为企业提供增值服务以及免征增值税和消费税、企业所得税核定征收等多项政策支持。

新冠肺炎疫情催生"宅经济"和全新消费场景,全球各国消费者将购物从线下转移到线上,电商行业因此迎来新风口,预计供应链全面恢复正常后,跨境电商将迎来发展的大好时机。

报告指出,2020年第一季度,美国和英国卖家的销售额总和较去年同期增长了53%。

而疫情之下,越南成熟的代发卖家市场给全球代发卖家上了重要的一课。虽然今年第一季度越南跨境电商的销售额逆势增长了11%,但新冠疫情对代发卖家造成了很大冲击,目前代发卖家面临着高昂的物流成本、低靡的消费者需求,以及亚马逊FBA临时入仓限制。

而近几年韩国跨境电商产业发展迅猛,2020年第一季度与去年同期相比增长高达45%,但疫情也对韩国市场造成了冲击。供应链产业受到的影响尤为明显,一位跨境卖家指出"供应商发到我们这里的货出现大幅延误。正常情况下2-3天就能收到的货,现在要花2周以上。"

此外马来西亚、菲律宾和新加坡等东南亚国家的边境管控措施也对整个地区的贸易造成了影响。某位韩国卖家不仅"其他市场的销售额下降了20%-30%,东南亚市场的销售额更是降低了50%。"

报告显示,新冠疫情对日本跨境电商造成了显著的负面影响,2020年第一季度日本电商的销售额整体下滑了16%。其中销售额下滑的最主要原因就是亚马逊FBA的入仓限制。

欧洲是受疫情影响较为严重的一个地区,西班牙、法国和意大利三个国家中,电商产业吸引了越来越多的从业者;在西班牙,跨境卖家人数同比增长了30%,法国13%,意大利的增长则高达85%。在第一季度,法国卖家的销售额仍实现了12%的同比增长,这可能得益于法国成熟的电商生态环境。另一方面,由于受到疫情的冲击, 意大利和西班牙卖家销量的下降超过10%。

此外,最近的一项调查显示,疫情爆发以来,欧洲网购消费占消费总额一半以上的消费者人数出现了明显增长。

而近几年印度的跨境电商稳步发展,2020年第一季度的电商销售额与去年同期相比增长了8%。然而,第一季度之后的前景却不容乐观。印度从3月24日起开始实施全国封城,13亿人被隔离在家,导致供应链停摆,卖家无法发货,亚马逊和Flipkart也暂停了印度的业务。不过目前已经出现了一些缓解的迹象,政府已宣布印度的电商市场可以恢复正常运营。

Payoneer派安盈大中华区总经理James Huang表示,全球疫情蔓延将线下需求挤压到线上,加速了全球数字化转型,对于跨境电商行业和中国卖家发展,都是一个历史性机遇,有效提升了中国卖家的抗风险经营能力。此外,疫情之下跨境电商品牌化价值愈发凸显,有助于推动中国卖家从传统外贸关系中转型升级、打造国际品牌。

据了解,全球跨境电商指数报告是Payoneer派安盈每半年发布一次的行业报告,基于10万名跨境卖家的数据样本。


(文章来源:亿邦动力网)



文章来源:https://www.ikjzd.com/home/123662
更多跨境电商运营技巧尽在跨境知道网https://www.ikjzd.com

大批Listing突遭下架,这些词都不能用了!

大批Listing突遭下架,这些词都不能用了!

最近几天,亚马逊上多个链接突然变狗,原因是被查出带有杀虫剂、医疗用品、成人用品、毒品等违规字眼,据美国相关部门最新消息,目前多个词都不能再用了,卖家需谨慎。

多个listing已被下架,敏感词危机又来了

昨天,一位亚马逊卖家反映,其一个正规售卖的链接突然变狗,卖家一头雾水便向客服咨询,被告知是listing中添加了类似Cocaine、Heroin、Syphilis、Morphia、Opium、Coca Leaves等违规词。而近一周,平台上链接因敏感词变狗的案例不胜枚举:

周六,一个listing 被恶意添加爆炸物、病毒等词链接变狗,前天申诉回来又被标为成人用品,很无奈……

先是改五点成病毒爆炸品,捞回来后又是成人用品,这些人太*了;

我的链接也变狗了,被添加医疗用品;

违规词倒是没被添加,但有产品被恶意标记成人用品;

根据卖家的反馈,链接因敏感词变狗一事在上周六也就是6月6日集中爆发过一轮。当时,多个链接被判为杀虫剂或农药产品,其中一位卖家的爆款不幸被卷入其中。

这位卖家表示,其日出两万美金的爆款突然变狗,而在此之前,无论是后台还是邮箱,该卖家都没有收到任何通知,listing直接被删除,除去被同行恶搞的可能性,其初步判断被判定为杀虫剂产品或者农药产品。该卖家晒出的销售数据显示,其日销量达500多,日销售额超2万美金。

3905.png

另一位卖家表示也遇到了同样的情况:后台显示商品信息被删除,开case客服回复应该是杀虫剂或FDA关键词误删,可以自己在后台模板上传或申诉,其中前者恢复较快。

之后,前文爆款受损卖家收到客服回复,其产品确被判为杀虫剂,后台显示可售可编辑,但前台变狗,尝试用模板刷新,但依然未能解决。

有卖家帮忙分析这一情况:1、如果真的是杀虫剂、农药,这样还不算难;2、不能排除被恶搞,找服务商搞竞争对手的不在少数;3、找出具体问题具体分析,能申诉最好,服务商有多种恢复链接的的服务,有些可能对账号有风险;4、翻新链接能回来,但是没有review和权重,对于如此链接来说损失巨大。

在这类事件中,链接直接被blocked而不是inactive情况十分严重,也因此引起了不少卖家的重视,

除上文所说的一些敏感词之外,卖家透露,违规词包括但不限于:Ear Candles Cocaine Heroin Syphilis Morphia Opium Coca Leaves Pinzon Synthol Synthrol or Swethol Posing Oil,令人费解的是,肉类也成为此次风波中的一个敏感词汇。

巧合?EPA通知亚马逊和eBay下架杀虫剂和COVID-19相关产品

在国内卖家反馈大批Listing被强行插入农药、疫情等敏感词之时,亚马逊和eBay接到通知,下架杀虫剂和治疗新冠肺炎的相关产品。这只是巧合吗?

外媒消息,周四美国环保署(EPA)向亚马逊和eBay发出通知,要求两家电子商务巨头停止销售杀虫剂和有问题的COVID-19产品。

该机构表示,第三方或直销商将这些"未注册、贴错标签或限制使用"的杀虫剂和冠状病毒相关的产品列在亚马逊和eBay的平台上。

环保局局长安德鲁·惠勒在周四的一份声明中说:"这些向亚马逊和eBay发出的停售令,显示了特朗普政府继续致力于保护美国人的健康和安全。我们对生产商声称的产品功效和安全性主张保持警惕。"

3906.png

惠勒表示:"我们有责任就可能对消费者造成伤害的未注册产品继续与公众进行透明沟通,并立即将这些产品撤出市场。

惠勒与亚马逊、eBay和其他电子商务网站就其平台上普遍存在的未注册、有问题和潜在危险的产品进行了讨论。美国环保署表示,尽管进行了讨论,但亚马逊和eBay未能持续屏蔽"未注册、商标错误或限制使用的杀虫剂"和COVID-19的产品。

在EPA宣布之时,Virus Shut Out仍在eBay上列出,而二氯甲烷在亚马逊和eBay两个平台上都有列出,但没有与冠状病毒相关的产品。

亚马逊发言人称,公司拥有"主动屏蔽关于COVID-19的不准确声明"的系统,并且"已经下架了有问题的产品"。

eBay表示:"在COVID-19期间,我们已采取重大措施,将不安全、虚假健康宣传或违反我们零容忍价格欺诈政策的产品从市场上封禁或迅速删除。"

EPA还表示,一些未注册或商标错误的杀虫剂和COVID-19产品在亚马逊和eBay上的描述包含如下:

"Kills COVID-19"

"Complete sterilization including the current pandemic virus"

"Coronavirus disinfectant"

"2020 Coronavirus Protection Coronavirus Protection Clearance Sale"

"A Powerful, Green, Non-Toxic Solution Proven to Inactivate our current viral strain"

"Epidemic Prevention""Efficient disinfection to prevent the spread of disease"

"Help keep your family and those you care for healthy"

"Nontoxic causes no permanent injuries"

"Ingredients are biodegradable and have no harmful impact on the environment"

"There is no damage to the environment"

"You can easily purify the living environment"

"Safe for all people using"

"Gentle to Child & Pets"

"Chemical Free"

值得注意的是,早在今年4月,美国环保署就对包括Facebook、eBay、Shopify、Qoo10、JoyBuy.com、Wish.com和banggood.com在内的一些电商平台发出了销售非法消毒剂产品的警告。

多位卖家猜测:强插关键词是人为恶搞

在警告之后,昨天EPA直接发通知,要求亚马逊和eBay停售杀虫剂和有问题的COVID-19产品。这下以上提到的词语还有之前平台禁用的一些词一下子变得异常敏感。这些敏感词致使国内大批卖家的Listing被下架。

据知情卖家反馈,这次Listing敏感词是被强行加入的。也就是说很大一部分卖家可能是被恶搞了。有受害卖家称,自己的出单还不错的产品,先是关键词被删除,然后被添加了一些杀虫剂、涉毒等不相关的敏感词,然后触发关键词审核之后,Listing无端变狗。这些操作很可能来自VC或者一些没底线的服务商。

Listing被下架之后,卖家们都急于恢复。业内卖家称可尝试进行这样操作:首先,删除过去的描述;其次,下载产品模板,选择产品类目;再次,编辑ASIN SKU,在需要修改的地方填写内容;最后,上载产品模板,导入确认。这样做之后,有些Listing能很快恢复。



文章来源:https://www.ikjzd.com/home/123674
更多跨境电商运营技巧尽在跨境知道网https://www.ikjzd.com

TikTok火热!Facebook放大招!

TikTok火热!Facebook放大招!


所有跨境电商卖家都要注意了。Facebook在5月放了一个大招,CEO扎克伯格通过直播宣布,将推出Facebook的自有商城平台Facebook Shops!Facebook Shops主要是要支持小型企业,让它们把店铺都放到线上,实现Facebook上建站推广收款完全闭环。这个消息发布之后,让Facebook股价一下涨到历史最高峰。

Facebook Shops的发布,相当于微信公布了官方开店工具。这对于熟悉微商、熟悉内容电商的跨境电商卖家,简直是开启了一个全新的机会窗口!Facebook Shops是逐步开放给用户的,一些获得邀请账号已经第一时间开始了和独立站进行联动,有了第一手的运营经验。

除了Facebook Shops,最近跨境圈最热的讨论,是海外版抖音TikTok可能不久会加上购物车功能。

国内抖音带货成为了全世界都关注的电商神话。在抖音短视频上打上购物车链接就可以导流到淘宝或者抖音小店,配上抖音的惊人流量,抖商已经成为很多年轻内容达人的创业路径。

在TikTok上,购物车功能还没开通,但普遍预计时间节点就在今年现在已经有不少带货网红在TikTok上开通账号,希望收割第一波超级红利。

这些网红在TikTok账号的简介中放上亚马逊店铺链接,将INS、FB、YouTube各个社交媒体平台的账号全部打通,形成闭环导流,日常发布各种种草视频,引导粉丝到其他连通的平台上成交订单。

现在的TikTok,就像2年前的抖音,平台还缺很多原创内容。那些经历过抖音快速增长的内容大咖,现在终于意识到这个平台的爆发力,纷纷开始进驻了。

Youtube上最火的出海网红李子柒,现在被成为油管中国文化输出第一人,她已经把作品发到TikTok上了。有Youtube强大的内容基础和丰富的海外粉丝积淀,她在TikTok上复制Youtube的成功只是时间问题。现在她在TikTok上粉丝已经有100万了。

搞笑视频博主Papi酱也陆续把作品发布到TikTok上了,先把流量坑位占了再说。

TikTok上种草带货的视频日渐增多,不过套路还不多。现在TikTok上跟抖音早期一样,只要发个稍微新奇一点的东西,就会有一堆人跑过来问在哪里买的。

看看,这位大哥在整理假发的一段视频获得了近15w点赞,1k评论和1.5k转发,底下很多人评论"how to buy this hair"。

同样是假发,另一位小姐姐采用亲身演示。她的假发帽展示视频,获得290w点赞,8k多评论,评论里求购呼声很高。

这款移动坐便器的产品展示视频,制作看着还有点粗糙,胜在够自然,有8.6w点赞,评论里也有多人询问购买渠道。

跨境电商卖家生意的核心,是打造优质产品的同时,不断找到更低成本的流量运营方式。

(来源:跨境电商跨境屋
以上内容属作者个人观点,不代表立场!本文经原作者授权转载,转载需经原作者授权同意。


如何毫无压力的获取平台流量,实现店铺爆单?

如何毫无压力的获取平台流量,实现店铺爆单?

对于想要流量的店铺来说,深入了解平台规则,把平台的要求都摸清,比什么都重要,不管是哪种流量,都需要自己去争取,也再给大家另外提一句,做电商是一个需要长期坚持的项目,不是上来一个月就能月入过万,那些都是骗人的,真正的电商行业哪会来钱这么快,只不过电商是未来发展的趋势,跨境电商刚好处于行业发展的风口,这个时候选择加入跨境电商,会在其他相同的条件下,创业更容易一些,顺风而为。

202001090939467528.jpg

今天要讲的是新手做店怎么才能更快更准确的获取到平台的流量,让店内的订单一波接着一波呢?最简单的就是保持持续上新,你的每次店铺上新都会获得一定的流量扶持,那么你持续上新的话,就能不断的获得流量扶持,也能吸引更多的消费者到你的店铺中来。当然上新也需要抓住机会,选择最佳的上新时间,站点不同最佳流量也不同,我们要选择浏览量最高的时间段,像是台湾地区最佳流量期应当是晚上,让消费者一浏览就能看到你的产品,增加产品的出单率。

另外关注买家也是一个不错的方法,因为粉丝之间的关注是互相的,你关注了买家,他们很有可能反过来关注你,如果我们店铺内有新品上架了,也会在第一时间推送给粉丝。

第二是是商品置顶,4个小时可以选择曝光5款产品,每次商品置顶呢, 也会把产品推放到分类靠前的地方,如果店铺有新品上架的话,可以频繁的对新品进行商品置顶,这样产品获得曝光量会更大,其实也就是能被更多的人给看到。 第三个方面是去产品的标题进行优化,标题是由产品名称+当下热搜词+属性+卖点等这些词汇组合起来的,所有针对产品我们要找出产品的卖点,产品属性是什么,然后再筛选当下的热搜词,给他进行严格结合,这样一个产品的标题就出来了。我再说一句选品,可以选择跟卖,但也要选择适合自己店铺定位的产品,假如你是卖鞋的,结果你跟了一个热卖的裙装,岂不是驴唇不对马嘴,跟卖尽量选择销量不错但还没成为爆款,有成为爆款可能的产品,这样的产品上架到店铺才有意义。

假如你选择了一款爆款产品到自己的店铺,你要知道,爆款产品的销量是很大的,作为中小卖家的我们是很难维持下来的,爆款来的快去的也快,说不定爆款产品流行过去了,自家店铺内的这款产品还有很多,到时候不得不低价出售。 在产品选择这一块,大家可以根据受众消费者群体去选择产品,这样首先给大家推荐的就是女性消费市场,女性消费者在市场中站到的比例和起到的作用,相信大家都了解,市场很大,当然市场大竞争者就会多一些,但是东南亚新兴市场中,发展潜力还有很多,就看你能不能及时抓住机遇。最后一个是产品的描述,不知道怎么写产品描述的,可以参考一下其他店铺产品是怎么写的,多看看同行也是在不断的丰富自己的做店经验。


店铺爆单需要天时地利人和,和机遇离不开,做shopee需要时刻紧跟电商发展趋势,电商是依托互联网而生,而互联网本来就是经济时代快速发展的产物,无时无刻都极有可能发生着变化,我们要做的不仅是在原地做好本职工作,还要时刻观察市场动态,准确无误的抢占先机,争取打造自己的爆款。

最后想给大家说的是心态问题,最近有很多小伙伴很焦急新开的店铺为什么还不出道,我觉着这个问题你问任何人,都给不了你想要的答案,与其做这种无用功,倒不如回到店铺本身,从店铺的角度去发现问题,不断优化店铺和产品,首先让自己做到"问心无愧",然后再交谈的时候就说我的店铺很规整,哪儿哪儿都做的都很好,很全,我不信它不出单!

(来源:Shopee图乐跨境)



文章来源:https://www.ikjzd.com/home/123677
更多跨境电商运营技巧尽在跨境知道网https://www.ikjzd.com

亚马逊的新大考:流量增速放缓,16个市场增长不均衡

亚马逊的新大考:流量增速放缓,16个市场增长不均衡

亚马逊的困境给竞争对手带来了流量。

随着电子商务支出的增长,亚马逊的增长速度慢于接下来的十大在线零售竞争对手。亚马逊在实现目标方面的困难,以及沃尔玛在食品杂货领域和塔吉特在当日送达方面的独特优势,推动了业绩的大幅增长。

在美国,大多数在线零售商的流量和销售额增长都快于亚马逊。2月份通常是电子商务流量最低的月份,而今年正好是疫情爆发前的最后一个月份。与2月份相比,亚马逊的流量在5月份增长了24.6%。根据SimilarWeb的流量估算,沃尔玛、家得宝、塔吉特和Wayfair等主要竞争对手的销售额增长了50-100%。

1..jpg

亚马逊5月份的访问量为25亿。另外的十大电子商务网站总共拥有29亿。因此,当亚马逊的访问量从2月份的20亿增长到5月份的25亿时,接下来的10家网站的访问量增长更多,从19亿增长到29亿。在网络流量方面,亚马逊的市场份额被主要竞争对手抢走。

在整个3月和4月,亚马逊优先处理必需品,亚马逊物流(FBA)进货受限,推迟非必需品的发货。到5月中旬,该公司已经恢复了大部分业务。不过,数月来对必需品的关注为其竞争对手创造了一个机会。今年5月,随着亚马逊的复苏挽回了客户,他们的增长开始放缓;尽管如此,其中一些网站在短短几个月内就将流量翻了一番。

2.jpg

在亚马逊的16个活跃市场中,增长并不均衡。在印度,由于3月底被迫关闭,它的规模有所缩小。4月是最糟糕的一个月,但到了5月,它已经开始复苏,基本恢复正常。与此同时,在3月初亚马逊登陆的荷兰,亚马逊的增长最快,因为它实际上是从零起步的。

英国、加拿大、巴西、墨西哥、澳大利亚、土耳其、新加坡和荷兰的增长速度超过了亚马逊的主要网站。与此同时,法国、德国和意大利几乎没有增长,而西班牙和日本则表现强劲。流量下降的一个网站是亚马逊中国,但这是因为该公司在一年前关闭了其在中国的业务。

3.jpg

亚马逊和它的一些竞争对手运营的市场从整体增长中受益。具体来说,沃尔玛、eBay、Etsy和亚马逊上的卖家看到了销售的急剧加速。其他的零售商要么没有市场来扩大他们的产品种类,要么像塔吉特,市场很小。

两个事实同时是正确的:亚马逊在大流行期间做得很好,而亚马逊的挣扎也为其他公司创造了机会。其中一些零售商遇到了困难,尤其是在履行方面,但随着电子商务在零售市场份额方面跨越了几年,一些零售商成功了。

来源:美鸥网


文章来源:https://www.ikjzd.com/home/123676
更多跨境电商运营技巧尽在跨境知道网https://www.ikjzd.com

亚马逊的新大考:流量增速放缓,16个市场增长不均衡

亚马逊的新大考:流量增速放缓,16个市场增长不均衡

亚马逊的困境给竞争对手带来了流量。

随着电子商务支出的增长,亚马逊的增长速度慢于接下来的十大在线零售竞争对手。亚马逊在实现目标方面的困难,以及沃尔玛在食品杂货领域和塔吉特在当日送达方面的独特优势,推动了业绩的大幅增长。

在美国,大多数在线零售商的流量和销售额增长都快于亚马逊。2月份通常是电子商务流量最低的月份,而今年正好是疫情爆发前的最后一个月份。与2月份相比,亚马逊的流量在5月份增长了24.6%。根据SimilarWeb的流量估算,沃尔玛、家得宝、塔吉特和Wayfair等主要竞争对手的销售额增长了50-100%。

1..jpg

亚马逊5月份的访问量为25亿。另外的十大电子商务网站总共拥有29亿。因此,当亚马逊的访问量从2月份的20亿增长到5月份的25亿时,接下来的10家网站的访问量增长更多,从19亿增长到29亿。在网络流量方面,亚马逊的市场份额被主要竞争对手抢走。

在整个3月和4月,亚马逊优先处理必需品,亚马逊物流(FBA)进货受限,推迟非必需品的发货。到5月中旬,该公司已经恢复了大部分业务。不过,数月来对必需品的关注为其竞争对手创造了一个机会。今年5月,随着亚马逊的复苏挽回了客户,他们的增长开始放缓;尽管如此,其中一些网站在短短几个月内就将流量翻了一番。

2.jpg

在亚马逊的16个活跃市场中,增长并不均衡。在印度,由于3月底被迫关闭,它的规模有所缩小。4月是最糟糕的一个月,但到了5月,它已经开始复苏,基本恢复正常。与此同时,在3月初亚马逊登陆的荷兰,亚马逊的增长最快,因为它实际上是从零起步的。

英国、加拿大、巴西、墨西哥、澳大利亚、土耳其、新加坡和荷兰的增长速度超过了亚马逊的主要网站。与此同时,法国、德国和意大利几乎没有增长,而西班牙和日本则表现强劲。流量下降的一个网站是亚马逊中国,但这是因为该公司在一年前关闭了其在中国的业务。

3.jpg

亚马逊和它的一些竞争对手运营的市场从整体增长中受益。具体来说,沃尔玛、eBay、Etsy和亚马逊上的卖家看到了销售的急剧加速。其他的零售商要么没有市场来扩大他们的产品种类,要么像塔吉特,市场很小。

两个事实同时是正确的:亚马逊在大流行期间做得很好,而亚马逊的挣扎也为其他公司创造了机会。其中一些零售商遇到了困难,尤其是在履行方面,但随着电子商务在零售市场份额方面跨越了几年,一些零售商成功了。

来源:美鸥网


文章来源:https://www.ikjzd.com/home/123676,更多跨境电商运营技巧:https://www.ikjzd.com

【亚马逊排名算法揭秘】搜索加购为什么能提升关键词排名?

【亚马逊排名算法揭秘】搜索加购为什么能提升关键词排名?


【亚马逊排名算法揭秘】搜索加购为什么能提升关键词排名?

有搜索框的地方就有排名,有排名就要研究其排名机制。笼统的说,搜索的目的就是根据用户输入的关键词展现出符合用户需求的结果,也就是说优先展示与用户搜索词相关的产品或结果。这句话很重要,任何搜索都是这个原理。

先思考几个问题:

1、为什么开广告能提升关键词排名?

2、为什么刷单能提升关键词排名?

3、listing完全不包含的词也能做出排名?

4、为什么关键词上首页服务能实现上首页?

事实上,对于一个新品,亚马逊怎么知道我这个产品是否符合用户的需求呢?这里说下两个算法:

1、静态相关--冷启动

当一个新产品上架后亚马逊会对listing进行相关关键词提取、计算词频等操作计算asin所属的关键词权重,关键词来源于卖家编辑Listing时定义的Title、Search Term和Bullet Point、所属 类目等 。关键词权重决定于Listing初次上架时间(新品期),关键词匹配度、关键词分布位置,以及关键词的重复度。

基于静态相关:我们可以在合理的情况下尽可能在多处、多布局、多重复关键词!

2、动态相关--用户行为影响

当两个同样的listing对应关键词的静态相关性完全一样的时候,亚马逊如何进一步判定哪个产品与关键词更相关呢?

什么是动态相关--基于以下用户行为建立的关键词和商品的相关性。

• 搜索点击+点击率

• 加购量+加购率

• 加心愿单+加心率

• 购买量 +购买率

• 评论数+评分值

• 退货率

以上行为都能增加关键词和asin的相关性,这样就能很好的解释文章开头的几个问题。

刷单加分项:搜索、点击、加购、购买、高评分等  --效果最好最直接

广告加分项:搜索、点击、加购、购买、(评价) --效果次之(原因广告转化率低)

关键词上首页服务:搜索、点击、加购--效果次次之(没有转化成交)

备注:以上各因素全站占比不同,购买权重占比要远高于其他。

所以,搜索点击加购加心愿单对相关性是一定有好处的,之所以效果为什么效果没那么好就是因为没有产生成交。

那么我们应该如何提升我们现有关键词排名(相关性)呢?

1、优秀合理的关键词布局功底。

2、合理的搜索、点击、加购、加心愿单

3、指定关键词广告和指定关键词刷单。

合理的坚持使用以上三点你的关键词排名定能遥遥领先!备注:关键词排名提升是一个长期的过程,亚马逊每个站点排名更新的时间不同并且一直在变,最近观察日本站要3-5天,美国站要8-10天。另外并不是说每个操作都能短期见效,优化本身就是一个长期积累的过程!

(来源:大宝站外推广)

以上内容属作者个人观点,不代表立场!本文经原作者授权转载,转载需经原作者授权同意。


政策解读 一文读懂南宁海关加工贸易内销四大减税政策

政策解读 一文读懂南宁海关加工贸易内销四大减税政策


政策解读 | 一文读懂南宁海关加工贸易内销四大减税政策

今年受新冠肺炎疫情影响,我国外贸发展面临前所未有的严峻挑战。面对该形势,国务院常务会议推出了一系列稳外贸政策,南宁海关积极落实并推出四项加工贸易内销税收改革措施,为外贸企业减税降费,全力帮扶企业有序推进关区内加工贸易转型升级和高质量发展。

这四项措施分别是①建立边角废料拍卖共管机制

②探索未出口残次品按状态征税改革

③暂免征收加工贸易货物内销缓税利息

④在综合保税区推广内销选择性征收关税

一、建立边角废料拍卖共管机制

边角料是加工贸易企业从事加工复出口业务时,因生产工艺原因,在生产加工过程中产生的废、碎料及下脚料,无法再用于生产加工合同项下出口制成品。边角料属于海关监管货物,同样要严格按照海关总署的相关要求进行依法处置。

该机制所称边角废料包括加工贸易边角料、副产品和按照规定需要以残留价值征税的受灾保税货物,以及海关特殊监管区域内企业保税加工过程中产生的边角料、废品、残次品和副产品等保税货物。

加工贸易企业可以通过"淘宝"平台进行拍卖,按照实际成交价格向海关申请征税,极大地减轻了企业的税负。在此机制下,经海关允许,加工贸易企业通过拍卖平台,委托具有法定资质的拍卖机构依法公开拍卖边角废料,将买卖流程从线下转移到线上,更好地规范交易秩序;取消海关与企业价格磋商等环节,便利企业内销申报,进一步拓宽边角废料处置渠道,降低企业制度性交易性成本,帮助企业"变废为宝",提升企业获得感。

二、探索未出口残次品按状态征税改革

残次品是指加工贸易企业从事加工复出口业务,在生产过程中产生的有严重缺陷或者达不到出口合同标准,无法复出口的制品(包括完成品和未完成品)。

对企业在生产过程产生的、无法复出口的残次品试行按实际状态征税,改革残次品折成进口料件换算传统,实现残次品遵照市场价格规律和贴近企业生产实际承担税负,切实降低解决企业残次品内销负担,促进企业税收成本降低。

近日梧州海关完成关区首票加工贸易残次品按状态征税试点申报工作。辖区内某企业以"边角料内销"监管方式申报内销一批"碧玉雕刻品"残次品,转变了以往残次品需折料件内销的申报方式,有效减轻了企业税赋成本。预计每年为梧州市加工贸易企业减轻税赋超过百万元。

三、暂免征收加工贸易货物内销缓税利息

4月14日,海关总署发布《关于暂免征收加工贸易货物内销缓税利息的公告》(海关总署公告〔2020〕第55号)自2020年4月15日至2020年12月31日(以企业内销申报时间为准),对企业内销加工贸易货物的,暂免征收内销缓税利息。

主要适用范围:对企业内销加工贸易货物根据相关规定需征收缓税利息的所有情况,均免征内销缓税利息,主要包括以下情况:

(一)加工贸易企业申请内销剩余料件或者其制成品(包括残次品)、副产品、受灾保税货物,可免于征收缓税利息。

(二)海关特殊监管区域内加工企业在选择按进口料件内销征收关税的,可免于征收缓税利息。

(三)综合保税区增值税一般纳税人资格试点企业销售保税货物的,可免于征收缓税利息。

企业无需另行申请,海关自动免征。

四、在综合保税区推广内销选择性征收关税

内销选择性征收关税政策是指对海关特殊监管区域内企业生产、加工并经"二线"内销的货物,根据企业申请,按其对应进口料件或按实际报验状态征收关税,进口环节增值税、消费税照章征收。企业选择按进口料件征收关税时,应一并补征关税税款缓税利息。

适用范围:自2020年4月15日起,将《财政部 海关总署 国家税务总局关于扩大内销选择性征收关税政策试点的通知》(财关税〔2016〕40号)规定的内销选择性征收关税政策试点,扩大到所有综合保税区。

该项政策实施以前,区内企业内销货物时应按实际报验状态征税。对于成品内销金额较大的企业而言,即使按料件申报征税的金额远低于按成品征税,也只能按成品内销征税。该政策出台后给区内企业提供了更多的选择权,企业利用该政策可以合理地降低税负。

(来源:Mike外贸说)

以上内容属作者个人观点,不代表立场!本文经原作者授权转载,转载需经原作者授权同意。


亚马逊运营经验分享:新手卖家如何快速出单?

亚马逊运营经验分享:新手卖家如何快速出单?

亚马逊新手卖家在运营过程中经常会提到的一个问题就是:好不容易有了亚马逊新店,店铺有新品,但是手上却没有什么资源,出单慢,该怎么办?看了很多社区大神的帖子,仍旧不是很明白这一整个流程,能不能系统讲下?真的是无从下手啊。

其实新手卖家推广可以用部分新品来做些促销先累积些评论、发FBA、快速获得buybox、开启站内广告等等。具体可以分成以下五个方面:

一、新品价格的竞争优势

对于亚马逊店铺刚上架的新品来说,Listing各方面的权重相对而言会偏低。此时,低价新品应该是让Listing展示出来的一个很好的杀手锏。因为如果价格没有一定的竞争优势,加上Listing权重偏低的情况,就会导致很少或者没有流量,出单自然而然就比较困难。

至于新品的定价,一般要从横向、纵向这两个维度进行考虑。一是要和一些同行卖家的产品价格先进行横向对比,确保自家产品能够在同类产品的售价中具有竞争优势,甚至是绝对的优势;二来就是要进行纵向对比,即考虑自己的拿货成本、适当利润。在进行横向、纵向对比的基础上,综合考虑后再确定最终的销售价格,如此设置的价格,相对而言是比较合适的。

二、Listing优化,重点要考虑长尾关键词

就新品而言,需要非常重视长尾关键词的使用。因为关键词在一条Listing中能够起到直接导流的作用。长尾关键词虽然搜索的用户会少很多,但指向更加明确,搜索这类词语的用户购买意向也较强,可以在新品打造阶段重点使用。

当然,每个买家都会重视关键词,只是对于不同的卖家而言,他们重视的侧重点会不一样。如果一条Listing已经被打造成爆款的产品,那么这个卖家一定会非常重视这个核心关键词,因为它能占据最大流量。但是,如果是一条新的Listing,可以从它的长尾关键词切入,这样,长尾关键词流量容易获取得更多。关于具体怎么做,目前大部分卖家会借助一些大数据关键词工具,如较常用的运营工具:亚马逊船长(https://www.amzcaptain.com/)等,都是不错的选择。

三、亚马逊店铺运营Review的配合

我们都知道,亚马逊平台的消费者大多数是不喜欢留Review的,但是在购买的时候又习惯把评价作为一个重要的参考指标。消费者的这个习惯本身就是矛盾的,正因为如此,亚马逊卖家在打造新品的时候,就需要采用更加合适的方式来增加Review。

此外,在整个店铺运营(包括新品推广、后期稳定销售)过程中,代表一条Listing口碑正是Review,所以Review是非常重要的。无论是推新品过程中还是后期稳定销售中,Review都非常重要。对于新品而言,初期可以想办法获取一些Review,后期配合销量,确保将Review进行稳步提升。

四、投放亚马逊站内CPC广告

因CPC广告拥有流量精准、转化率高的优点,可以获得更多的曝光和流量,是推广新品、打造爆款过程的必备手法。另外,如果店铺有产品Review的话,会很大程度上提升站内CPC广告的转化率。

五、提高转化率

亚马逊运营过程中,卖家一定要重视自己的转化率。此外,运营会涉及A9算法,算法中有2个非常重要的变量:订单数量和转化率。因为亚马逊新手卖家的新品订单数量是有限的,而且流量也是有限的,短期内难有大幅提升,所以卖家可以侧重于提高自身订单转化率。

最后比较推荐给亚马逊新手卖家的做法是:将店铺新品上架后,就开始做促销引流、Review,新品可以先发FBA。可以通过赠送礼物、产品、facebook来获取15个左右的评论,另外,可以结合广告一起做。如果新品获得了评论,会明显提高listing的转化率。



文章来源:https://www.ikjzd.com/home/123630
更多跨境电商运营技巧尽在跨境知道网https://www.ikjzd.com