Faits :
A.
Par jugement du 3 mai 2018, le Tribunal criminel de l'arrondissement de Lausanne a reconnu X._ coupable d'infraction grave à la LStup (Loi fédérale sur les stupéfiants et les substances psychotropes du 3 octobre 1951; RS 812.121), de blanchiment d'argent et d'infraction à la LArm (Loi fédérale sur les armes, les accessoires d'armes et les munitions du 20 juin 1997; RS 514.54). Il l'a condamné à une peine privative de liberté de sept ans, sous déduction de 535 jours de détention avant jugement (ch. II) et a ordonné son expulsion du territoire suisse pour une durée de dix ans (ch. V).
B.
Statuant sur appel de X._, la Cour d'appel pénale du Tribunal cantonal du canton de Vaud l'a rejeté et a confirmé la décision de première instance, par jugement du 23 août 2018.
La cour cantonale a retenu les faits suivants.
B.a. X._ est né en 1980 au Cap-Vert, pays dont il est ressortissant. Il a quinze frères et soeurs, dont certains vivent toujours au Cap-Vert alors que d'autres ont quitté le pays. Il a pour sa part quitté son pays d'origine en 2002 pour s'installer au Portugal, où il a vécu pendant trois ans, avant d'arriver en Suisse en 2005. Dès son arrivée en Suisse, il a commencé à travailler en qualité de maçon, métier qu'il exerçait déjà auparavant. En 2005, il a épousé A._, également de nationalité capverdienne, arrivée en Suisse en 2000. Il a dans un premier temps obtenu un permis B, puis une autorisation d'établissement. De son union avec A._ est née B._, en 2008. X._ a trois autres enfants âgés de 16 à 18 ans, issus d'une précédente relation. Récemment, ses deux filles aînées sont parties rejoindre leur mère au Portugal, alors que son garçon est resté au Cap-Vert. X._ entretient avec ses enfants des contacts réguliers. Depuis son incarcération, B._ vient lui rendre visite en prison chaque semaine.
Sur le plan financier, X._ percevait, avant son arrestation, un salaire mensuel brut de 6'000 francs. Il a des dettes commerciales à hauteur d'environ 50'000 fr., consécutives à la faillite d'une société de maçonnerie dont il était l'associé gérant. X._ envoie régulièrement de l'argent à ses enfants aînés, afin de subvenir à leurs besoins. Son épouse a toujours payé le loyer de leur appartement, qui s'élève à 1'390 fr. par mois.
Le casier judiciaire suisse de X._ fait état de trois condamnations, entre juillet 2010 et mai 2014, à des peines pécuniaires (allant de 22 à 80 jours-amende) pour conduite en état d'ébriété (taux qualifié), appropriation illégitime, tentative de contrainte et violation de l'obligation de tenir une comptabilité.
Il ressort d'un rapport sur le comportement de X._ en détention que, de manière générale, il respecte les règles et le cadre fixés par l'institution et qu'il adopte une attitude correcte tant envers le personnel que vis-à-vis de ses codétenus. Dans son travail et ses activités au sein de l'établissement pénitentiaire, il se montre agréable, poli, souriant, dynamique et investi.
B.b. Entre le courant de l'été 2016 au moins et le 15 novembre 2016, X._ s'est livré au trafic de cocaïne. Il a reçu d'un fournisseur vivant aux Pays-Bas, au moins quatre pains de cocaïne d'environ 1 kg qu'il devait ou pouvait vendre et qu'il a dissimulés au domicile de sa soeur, où 3,930 kg nets ont été retrouvés. Il a vendu ou s'apprêtait à vendre au moins 4,410 kg nets de cette drogue (dont 2'384,7 g de cocaïne pure). Depuis juillet 2016, il a envoyé et fait envoyer à l'étranger un total de 11'105 fr. 50 et était en possession à son domicile de 16'500 fr., argent provenant manifestement de son trafic de stupéfiants. X._ a vendu à tout le moins 390 g de cocaïne (dont 174 g pure) à divers toxicomanes, dont l'un a aussi agi en qualité d'intermédiaire pour son compte pour une quantité de 2 g au moins.
Du 4 juillet au 14 novembre 2016, il a envoyé à l'étranger, par le biais d'une agence d'envoi d'argent, un montant total de 3'211 fr. 50 provenant des ventes de produits stupéfiants qu'il a réalisées. A quatre reprises entre septembre et octobre 2016, un tiers a envoyé, pour le compte de X._ un montant total de 7'935 fr. au fournisseur de cocaïne.
A Lausanne, le 15 novembre 2016, X._ détenait, à son domicile, deux fusils, vingt cartouches et deux douilles.
C.
X._ forme un recours en matière pénale auprès du Tribunal fédéral contre le jugement cantonal et conclut, avec suite de frais et dépens, principalement, à sa réforme en ce sens qu'une peine privative de liberté de 54 mois est prononcée (sous déduction de la détention subie) et qu'il est renoncé à son expulsion du territoire suisse. A titre subsidiaire, il conclut à ce que son expulsion soit ordonnée pour une durée de cinq ans. Par ailleurs, X._ requiert le bénéfice de l'assistance judiciaire.
Considérant en droit :
1.
Le recourant reproche à la cour cantonale d'avoir enfreint les règles guidant la fixation de la peine et de ne pas l'avoir suffisamment motivée. Il considère que la peine prononcée en l'espèce est exagérément sévère.
1.1. L'art. 47 CP prévoit que le juge fixe la peine d'après la culpabilité de l'auteur. Il prend en considération les antécédents et la situation personnelle de ce dernier ainsi que l'effet de la peine sur son avenir (al. 1). La culpabilité est déterminée par la gravité de la lésion ou de la mise en danger du bien juridique concerné, par le caractère répréhensible de l'acte, par les motivations et les buts de l'auteur et par la mesure dans laquelle celui-ci aurait pu éviter la mise en danger ou la lésion, compte tenu de sa situation personnelle et des circonstances extérieures (al. 2). La culpabilité de l'auteur doit être évaluée en fonction de tous les éléments objectifs pertinents, qui ont trait à l'acte lui-même, à savoir notamment la gravité de la lésion, le caractère répréhensible de l'acte et son mode d'exécution. Du point de vue subjectif, sont pris en compte l'intensité de la volonté délictuelle ainsi que les motivations et les buts de l'auteur. A ces composantes de la culpabilité, il faut ajouter les facteurs liés à l'auteur lui-même, à savoir les antécédents, la réputation, la situation personnelle (état de santé, âge, obligations familiales, situation professionnelle, risque de récidive, etc.), la vulnérabilité face à la peine, de même que le comportement après l'acte et au cours de la procédure pénale (ATF 141 IV 61 consid. 6.1.1 p. 66 s.).
Le juge dispose d'un large pouvoir d'appréciation dans le cadre de la fixation de la peine. Le Tribunal fédéral n'intervient que lorsque l'autorité cantonale a fixé une peine en dehors du cadre légal, si elle s'est fondée sur des critères étrangers à l'art. 47 CP, si des éléments d'appréciation importants n'ont pas été pris en compte ou, enfin, si la peine prononcée est exagérément sévère ou clémente au point de constituer un abus du pouvoir d'appréciation (ATF 136 IV 55 consid. 5.6 p. 61; arrêt 6B_817/2018 du 23 octobre 2018 consid. 3.1).
L'exercice de ce contrôle suppose que le juge exprime, dans sa décision, les éléments essentiels relatifs à l'acte ou à l'auteur dont il tient compte, de manière à ce que l'on puisse constater que tous les aspects pertinents ont été pris en considération et comment ils ont été appréciés, que ce soit dans un sens aggravant ou atténuant (art. 50 CP; ATF 134 IV 17 consid. 2.1 p. 20 et les arrêts cités). Le juge peut passer sous silence les éléments qui, sans abus du pouvoir d'appréciation, lui apparaissent non pertinents ou d'une importance mineure. La motivation doit justifier la peine prononcée, en permettant de suivre le raisonnement adopté, même si le juge n'est pas tenu d'exprimer en chiffres ou en pourcentages l'importance qu'il accorde à chacun des éléments qu'il cite. Un recours ne saurait toutefois être admis simplement pour améliorer ou compléter un considérant lorsque la décision rendue apparaît conforme au droit (ATF 136 IV 55 consid. 5.6 p. 61; arrêts 6B_559/2018 du 26 octobre 2018 consid. 1.2 destiné à la publication; 6B_111/2015 du 3 mars 2016 consid. 2.2, non publié aux ATF 142 IV 196). Plus la peine est élevée, plus la motivation doit être complète (ATF 127 IV 101 consid. 2c p. 105; arrêt 6B_559/2018 du 26 octobre 2018 consid. 1.2 destiné à la publication).
En matière de trafic de stupéfiants, il y a lieu de tenir compte plus spécifiquement des éléments suivants. Même si la quantité de drogue ne joue pas un rôle prépondérant, elle constitue sans conteste un élément important. Elle perd cependant de l'importance au fur et à mesure que l'on s'éloigne de la limite, pour la cocaïne de 18 grammes (ATF 138 IV 100 consid. 3.2 p. 103 s.), à partir de laquelle le cas doit être considéré comme grave au sens de l'art. 19 al. 2 let. a LStup (ATF 121 IV 193 consid. 2b/aa p. 196). Le type de drogue et sa pureté doivent aussi être pris en considération (ATF 122 IV 299 consid. 2c p. 301 s.; 121 IV 193 consid. 2b/aa p. 196). Le type et la nature du trafic en cause sont aussi déterminants. L'appréciation est différente selon que l'auteur a agi de manière autonome ou comme membre d'une organisation. Dans ce dernier cas, il importera de déterminer la nature de sa participation et sa position au sein de l'organisation. L'étendue du trafic entrera également en considération. Un trafic purement local sera en règle générale considéré comme moins grave qu'un trafic avec des ramifications internationales. Enfin, le nombre d'opérations constitue un indice pour mesurer l'intensité du comportement délictueux. S'agissant d'apprécier les mobiles qui ont poussé l'auteur à agir, le juge doit distinguer le cas de celui qui est lui-même toxicomane et agit pour financer sa propre consommation de celui qui participe à un trafic uniquement poussé par l'appât du gain (arrêts 6B_780/2018 du 9 octobre 2018 consid. 2.1; 6B_807/2017 du 30 janvier 2018 consid. 2.1; 6B_189/2017 du 7 décembre 2017 consid. 5.1).
1.2. Pour fixer la peine, la cour cantonale a relevé, à l'instar des juges de première instance, l'importance du trafic et partant, son impact sur la santé publique, le mobile crapuleux (le recourant n'étant pas consommateur), le fait que seule l'arrestation avait mis un terme à son commerce, le concours d'infractions, le comportement adopté durant l'enquête (consistant à changer de version sans état d'âme), les antécédents pénaux, l'absence de prise de conscience, le refus d'assumer ses actes ainsi que l'absence de consistance des regrets aux débats.
Les juges cantonaux ont qualifié la culpabilité du recourant de très élevée, notamment du fait de son mobile, de l'absence de scrupules à favoriser l'importation de quantités très importantes de produits stupéfiants en vue de maximiser ses profits, sans penser aux dégâts que ces toxiques pouvaient infliger à de jeunes consommateurs, alors qu'il est père de quatre enfants. Ils ont relevé que le recourant avait déployé une énergie criminelle intense, s'investissant en continu dans son trafic. Quand bien même la surveillance policière n'avait duré que quelques jours et les faits constitutifs d'infractions pénales s'étaient étalés sur une période réduite de quelques mois, il était évident que pour que des fournisseurs confient de pareilles quantités de drogue au recourant, ce dernier avait dû leur apparaître comme un partenaire expérimenté et fiable. Le recourant avait agi à l'insu de ses proches, n'hésitant pas à utiliser le domicile de sa soeur comme " planque " et avait pris d'autres précautions en faisant appel à un intermédiaire pour transférer ses paiements au fournisseur à l'étranger. Il avait vendu à des intermédiaires bien davantage qu'à des toxicomanes directement. Après le choc de son arrestation, qui l'avait amené à concéder certains faits, il avait par la suite choisi de se rétracter et de tout nier en bloc, démontrant ainsi que son principal regret était celui d'avoir été pris. La cour cantonale a constaté que les éléments à charge étaient lourds et a tenu compte, à décharge, du rapport de détention favorable. Elle a considéré que la peine privative de liberté de sept ans, certes lourde, apparaissait néanmoins justifiée.
1.3. Contrairement à ce qu'affirme le recourant, sans aucun développement, le considérant détaillé du jugement entrepris permet amplement de comprendre les critères pris en considération pour fixer la peine, éléments qu'il a pu attaquer devant le Tribunal fédéral en toute connaissance de cause. Ainsi, le grief déduit d'une violation du devoir de motiver est infondé.
1.4. Par ailleurs, le recourant prétend en substance que certains éléments à décharge ont été omis et que d'autres éléments à charge ont pesé trop lourd dans la fixation de la peine. Il ne conteste toutefois pas la pertinence des critères liés à la réalisation des différentes infractions reprochées. Il ne formule aucun grief déduit de l'art. 49 CP (concours d'infractions).
1.4.1. Le recourant reproche à la cour cantonale de ne pas avoir tenu compte de sa " crédibilité "et de sa " bonne volonté ".
Or, si la cour cantonale a relevé que le recourant avait avoué certains faits, elle a expressément retenu qu'il s'était rétracté et avait tout nié en bloc par la suite. Le recourant ne conteste pas cette constatation de fait sous l'angle de l'arbitraire (cf. art. 97 al. 1; 106 al. 2 LTF). Par ailleurs, il ne démontre pas et l'on ne voit pas en quoi les seules déclarations évoquées par le recourant auraient permis d'élucider des faits qui, à ce défaut, seraient restés obscurs (cf. arrêts 6B_965/2018 du 15 novembre 2018 consid. 3.3; 6B_780/2018 du 9 octobre 2018 consid. 2.1 et les références citées). Aussi, la cour cantonale n'était pas tenue de tenir compte, à décharge, d'une bonne collaboration durant la procédure.
Par ailleurs, c'est en vain que le recourant tente de justifier les raisons pour lesquelles il avait répondu, sur question du tribunal de première instance, qu'il n'avait jamais été condamné par la police auparavant, dès lors qu'il ne ressort pas du jugement entrepris que ces déclarations auraient été prises en compte dans la fixation de la peine. En tout état, en tant que le recourant présente sa propre appréciation de ses déclarations aux débats, son procédé est purement appellatoire, partant irrecevable (cf. ATF 142 III 364 consid. 2.4 p. 368 et les références citées).
1.4.2. Le recourant considère que sa " brève activité ne justifie pas une peine privative de liberté aussi lourde ". Ce faisant, il omet que la cour cantonale a expressément tenu compte de cet aspect tout en le relativisant au vu de la quantité de drogue en question. Faute pour le recourant de s'en prendre à la motivation topique, sa critique est irrecevable (cf. art. 42 al. 2 LTF).
1.4.3. Le recourant ne saurait rien déduire en sa faveur de l'absence d'antécédents spécifiques et du fait qu'il n'aurait été condamné auparavant qu'à des peines pécuniaires, les antécédents faisant partie des éléments à prendre en considération lors de la fixation de la peine (cf. supra consid. 1.1).
1.4.4. Le recourant prétend que sa situation professionnelle et familiale n'a pas été suffisamment prise en considération, de même que l'effet de la peine sur son avenir.
Or il est inévitable que l'exécution d'une peine ferme d'une certaine durée ait des répercussions sur la vie professionnelle et familiale du condamné. Ces conséquences ne peuvent conduire à une réduction de la peine qu'en cas de circonstances extraordinaires (arrêts 6B_780/2018 du 9 octobre 2018 consid. 2.1; 6B_352/2018 du 27 juillet 2018 consid. 4.1.2; 6B_1182/2017 du 12 avril 2018 consid. 2.3). Le recourant ne prétend ni ne démontre que de telles circonstances seraient réalisées en l'espèce. Le fait que le recourant ait une famille et une vie professionnelle n'est pas suffisant, dès lors que cette situation ne diffère sur ce point pas de celle de nombreux autres condamnés.
1.4.5. Selon le recourant, la peine prononcée est exagérément sévère. Il prétend que " dans des cas d'espèce similaires, ce sont des peines d'ensemble de cinq ans qui ont été confirmées ", en référence à deux affaires tranchées en 2013 et 2008. Or le Tribunal fédéral a eu l'occasion de rappeler à maintes reprises que toute comparaison d'une peine avec celles prononcées dans d'autres affaires était délicate, vu les nombreux paramètres entrant en ligne de compte. Il ne suffit d'ailleurs pas que le recourant puisse citer un ou deux cas où une peine particulièrement clémente a été fixée pour prétendre à un droit à l'égalité de traitement. Les disparités en cette matière s'expliquent normalement par le principe de l'individualisation des peines, voulu par le législateur; elles ne suffisent pas en elles-mêmes pour conclure à un abus du pouvoir d'appréciation (ATF 141 IV 61 consid. 6.3.2 p. 69). La comparaison invoquée est sans pertinence en l'espèce.
1.4.6. En définitive, le recourant ne mentionne aucun élément important, propre à modifier la peine, qui aurait été omis ou pris en considération à tort par la cour cantonale.
La peine demeure dans la partie inférieure du cadre légal (cf. art. 19 al. 2 LStup; art. 40, 49 al. 1 CP). Au vu des circonstances, il n'apparaît pas qu'elle soit exagérément sévère au point de constituer un abus du pouvoir d'appréciation. Le grief de violation de l'art. 47 CP, dans la mesure de sa recevabilité, est infondé.
2.
Le recourant considère que l'expulsion du territoire suisse pour une durée de dix ans est disproportionnée. Il dénonce une violation de l'art. 66a CP.
2.1. Aux termes de l'art. 66a al. 1 let. o CP, le juge expulse de Suisse l'étranger qui est condamné notamment pour infraction à l'art. 19 al. 2 LStup, quelle que soit la quotité de la peine prononcée à son encontre, pour une durée de cinq à quinze ans. Selon l'art. 66a al. 2 CP, le juge peut exceptionnellement renoncer à une expulsion lorsque celle-ci mettrait l'étranger dans une situation personnelle grave et que les intérêts publics à l'expulsion ne l'emportent pas sur l'intérêt privé de l'étranger à demeurer en Suisse. A cet égard, il tiendra compte de la situation particulière de l'étranger qui est né ou qui a grandi en Suisse.
En l'espèce, le recourant a commis une infraction (art. 19 al. 2 LStup) qui tombe sous le coup de l'art. 66a al. 1 let. o CP. Il remplit donc a priori les conditions d'une expulsion, sous la réserve d'une application de l'art. 66a al. 2 CP, voire également des normes de droit international.
2.1.1. L'art. 66a al. 2 CP est formulé comme une norme potestative ("Kannvorschrift"), en ce sens que le juge n'a pas l'obligation de renoncer à l'expulsion, mais peut le faire si les conditions fixées par cette disposition sont remplies. Ces conditions sont cumulatives. Afin de pouvoir renoncer à une expulsion prévue par l'art. 66a al. 1 CP, il faut donc, d'une part, que cette mesure mette l'étranger dans une situation personnelle grave et, d'autre part, que les intérêts publics à l'expulsion ne l'emportent pas sur l'intérêt privé de l'étranger à demeurer en Suisse (arrêts 6B_209/2018 du 23 novembre 2018 consid. 3.3 destiné à la publication; 6B_724/2018 du 30 octobre 2018 consid. 2.3.1; 6B_296/2018 du 13 juillet 2018 consid. 3.2; 6B_506/2017 du 14 février 2018 consid. 1.1 et les références citées).
Le fait que la clause de rigueur soit une norme potestative ne signifie pas que le juge pénal pourrait librement décider d'appliquer ou non l'exception de l'art. 66a al. 2 CP. Le juge doit faire usage du pouvoir d'appréciation qui lui est conféré par une norme potestative dans le respect des principes constitutionnels. S'il devait refuser de renoncer à l'expulsion alors que les conditions de la clause de rigueur sont remplies, le principe de proportionnalité ancré à l'art. 5 al. 2 Cst. serait violé. Le juge doit ainsi renoncer à l'expulsion lorsque les conditions de l'art. 66a al. 2 CP sont réunies, conformément au principe de proportionnalité (arrêts 6B_209/2018 du 23 novembre 2018 consid. 3.3 destiné à la publication; 6B_1027/2018 du 7 novembre 2018 consid. 1.3; 6B_724/2018 du 30 octobre 2018 consid. 2.3.1).
Selon un arrêt de principe récent, il est justifié de s'inspirer, de manière générale, des critères prévus par l'art. 31 al. 1 de l'ordonnance relative à l'admission, au séjour et à l'exercice d'une activité lucrative (OASA; RS 142.201) et de la jurisprudence y relative dans le cadre de l'application de l'art. 66a al. 2 CP. Comme la liste de l'art. 31 al. 1 OASA n'est pas exhaustive et que l'expulsion relève du droit pénal, le juge devra également, dans l'examen du cas de rigueur, tenir compte des perspectives de réinsertion sociale du condamné (arrêt 6B_209/2018 du 23 novembre 2018 consid. 3.3.2 destiné à la publication et références citées).
2.1.2. La loi ne définit pas ce qu'il faut entendre par une " situation personnelle grave " (première condition cumulative) ni n'indique les critères à prendre en compte dans la pesée des intérêts (seconde condition cumulative).
En règle générale, il convient d'admettre l'existence d'une situation personnelle grave au sens de l'art. 66a al. 2 CP lorsque l'expulsion constituerait, pour l'intéressé, une ingérence d'une certaine importance dans son droit au respect de sa vie privée et familiale garanti par la Constitution fédérale (art. 13 Cst.) et par le droit international, en particulier l'art. 8 CEDH (arrêts 6B_724/2018 du 30 octobre 2018 consid. 2.3.2; 6B_371/2018 du 21 août 2018 consid. 2.5).
2.2. En l'espèce, la cour cantonale a reconnu que le recourant avait d'importantes attaches en Suisse, pays dans lequel il vit et travaille depuis treize ans en compagnie de son épouse et de sa fille cadette, âgée de 10 ans.
Ainsi, à supposer que le recourant puisse se prévaloir d'un droit découlant de l'art. 8 al. 1 CEDH, sous l'angle du droit au respect de sa vie privée et familiale, il reste à déterminer si son intérêt privé à rester en Suisse l'emporte sur les intérêts présidant à son expulsion (pesée des intérêts).
Cet examen implique en particulier de déterminer si la mesure litigieuse respecte le principe de la proportionnalité découlant des art. 5 al. 2 Cst. et 8 par. 2 CEDH (cf. arrêt 6B_1027/2018 du 7 novembre 2018 consid. 1.5 et arrêts cités).
2.2.1. La cour cantonale a relevé que le recourant a fait l'objet de trois condamnations en 2010, 2013 et 2014 et qu'il est condamné dans la présente procédure à une peine privative de liberté de sept ans notamment pour infraction grave à la LStup. Au vu de l'importance de cette condamnation et du bien juridique lésé, soit la santé publique, du mobile crapuleux et de l'absence de prise de conscience laissant présager un important risque de récidive, l'intérêt public à assurer la sécurité l'emportait manifestement sur l'intérêt privé du recourant à demeurer en Suisse. Cela d'autant plus que le recourant avait conservé des liens vivants avec son pays d'origine, où vivait encore son fils et, jusqu'à il y a peu, ses deux filles aînées, parties récemment s'installer au Portugal. Il était ainsi possible pour le recourant et sa famille de retourner au Cap-Vert, son épouse ayant également la nationalité de ce pays, voire au Portugal, où le recourant avait admis qu'il serait envisageable de s'installer.
2.2.2. On peine à comprendre la critique du recourant en tant qu'il prétend que la cour cantonale n'aurait pas " fait usage du plein pouvoir d'examen sur tous les points attaqués du jugement ". En tant qu'il invoque un déni de justice au motif que la cour cantonale n'aurait pas traité ses griefs dirigés contre la décision de première instance, son grief, insuffisamment motivé est irrecevable (art. 42 al. 2 et 106 al. 2 LTF). S'il fait valoir une violation du devoir de motivation, force est de constater que les considérants du jugement entrepris mettent en exergue les motifs d'une expulsion d'une durée de dix ans, de sorte que le recourant est infondé à invoquer une violation de son droit d'être entendu sur ce point (cf. art. 29 al. 2 Cst.; ATF 143 IV 40 consid. 3.4.3 p. 46 et les références citées; 141 IV 249 consid. 1.3.1 p. 253).
2.2.3. Le recourant ne critique d'aucune manière le raisonnement cantonal en tant qu'il porte sur les circonstances et conséquences sur la santé publique de l'infraction retenue et sur le risque de récidive. En substance, il se contente de rappeler sa situation personnelle, familiale et professionnelle en Suisse et prétend être " très bien intégré " dans ce pays.
Or en l'espèce, les intérêts présidant à l'expulsion du recourant sont importants, dès lors que celui-ci s'est - certes sur une courte période - livré à un très important trafic de stupéfiants. A cet égard il est rappelé que la CourEDH estime que, compte tenu des ravages de la drogue dans la population, les autorités sont fondées à faire preuve d'une grande fermeté à l'encontre de ceux qui contribuent à la propagation de ce fléau (cf. arrêts CourEDH K.M. c. Suisse du 2 juin 2015 [requête n° 6009/10] § 55; Dalia c. France du 19 février 1998, Recueil CourEDH 1998-I 76 § 54). Par ailleurs, il convient de relever que la peine privative de liberté à laquelle a été condamné le recourant dépasse largement une année, ce qui pourrait permettre une révocation de son autorisation d'établissement sur la base des art. 62 al. 1 let. b et 63 al. 1 let. a LEI (cf. ATF 139 I 145 consid. 2.1 p. 147, selon lequel constitue une " peine privative de liberté de longue durée " au sens de l'art. 62 al. 1 let. b LEtr [depuis le 1er janvier 2019 : LEI] toute peine dépassant un an d'emprisonnement).
Le recourant est arrivé en Suisse à l'âge adulte (25 ans) et y a passé moins d'années qu'au Cap-Vert. Le recourant s'écarte de manière inadmissible de l'état de fait établi par la cour cantonale (art. 105 al. 1 et 106 al. 2 LTF) lorsqu'il prétend avoir passé l'intégralité de sa vie d'adulte et de père en Suisse, dès lors qu'il était père de trois enfants au Cap-Vert et y est resté jusqu'à ses 22 ans.
Son intégration en Suisse ne s'avère pas particulièrement réussie dès lors qu'il cumule des dettes commerciales et des dettes privées et qu'il a été condamné à trois reprises entre 2010 et 2014 pour différentes infractions pénales. En outre, s'agissant de l'enracinement linguistique en Suisse, il ressort du jugement entrepris, non contesté sur ce point, que le recourant était assisté d'un interprète français-portugais lors des débats d'appel (cf. art. 105 al. 1 LTF; jugement entrepris p. 2 et 4).
Rien ne permet de considérer que le recourant se réintégrerait plus difficilement au Cap-Vert, pays dont il maîtrise la langue, où il possède encore de la famille et où il a déjà travaillé par le passé, qu'en Suisse. Cela vaut indépendamment du contexte économique de son pays d'origine. L'épouse du recourant étant d'origine capverdienne, rien n'empêche la famille de s'installer dans ce pays. En tout état, selon ses propres déclarations, le recourant aurait la possibilité de résider au Portugal, où résident deux de ses filles et leur mère et où il a vécu pendant trois ans, à condition d'obtenir un visa (cf. jugement entrepris, p. 3). Sur ce point, c'est en vain que le recourant affirme de manière purement appellatoire, partant irrecevable, qu'il ne souhaite aucunement s'installer au Portugal.
Le temps écoulé depuis la commission des infractions (ayant pris fin en novembre 2016) n'est pas important. Au demeurant, le fait que le recourant ait fait preuve d'un comportement adéquat en détention n'est pas de nature à apporter un nouvel éclairage, étant rappelé qu'il s'agit d'une circonstance généralement attendue de tout délinquant (ATF 139 II 121 consid. 5.5.2 p. 128; arrêt 6B_371/2018 du 21 août 2018 consid. 3.3).
En définitive, compte tenu de la menace pour l'ordre et la santé publics que constituent les infractions sanctionnées en l'espèce, de la médiocre intégration du recourant en Suisse et de la persistance de celui-ci à violer l'ordre juridique suisse, l'intérêt public à l'expulsion l'emporte sur l'intérêt privé de l'intéressé à demeurer en Suisse. La réintégration au Cap-Vert, pays dans lequel celui-ci est né, a grandi, a passé la majeure partie de sa vie et avec lequel il conserve des liens culturels et familiaux non négligeables, ne paraît pas difficile. La réintégration au Portugal est également envisageable. Il n'apparaît pas que le recourant s'y trouvera dans une situation sensiblement plus défavorable ni qu'il disposerait, en Suisse, de meilleures chances de réinsertion sociale. L'expulsion portera certes une atteinte aux relations entre le recourant et sa femme et l'un de ses quatre enfants, mais il convient de relever que cette mesure reste d'une durée limitée et ne l'empêchera pas d'entretenir un contact avec celles-ci par le biais des moyens de communication modernes (cf. ATF 144 I 91 consid. 5.1 p. 97). Par ailleurs, rien ne les empêche de s'établir ensemble au Cap-Vert, pays dont l'épouse du recourant est également ressortissante.
Dans ces circonstances, l'expulsion pour une durée de dix ans s'avère conforme au principe de proportionnalité (s'agissant de la durée de l'expulsion, cf. arrêt 6B_1043/2017 du 14 août 2018 consid. 3.1.3 et référence citée; arrêt de la CourEDH Shala c. Suisse du 15 novembre 2012, requête n° 52873/09 § 56).
2.3. La seconde condition pour renoncer à l'expulsion au sens de l'art. 66a al. 2 CP n'étant pas réalisée, la cour cantonale n'a pas violé le droit fédéral, constitutionnel ou international en ordonnant l'expulsion du recourant pour une durée de dix ans.
L'examen des conditions d'application de l'art. 66a al. 2 CP ayant notamment impliqué un contrôle de la proportionnalité de la mesure ainsi que la prise en compte, dans une société démocratique, du droit du recourant au respect de sa vie privée et familiale (cf. arrêts 6B_724/2018 du 30 octobre 2018 consid. 3; 6B_371/2018 du 21 août 2018 consid. 4), les références de ce dernier à une éventuelle violation de l'art. 8 CEDH n'ont plus d'objet, l'expulsion prononcée ne portant pas atteinte à cette disposition.
3.
Le recours doit être rejeté dans la mesure où il est recevable. Comme il était dénué de chances de succès, la demande d'assistance judiciaire doit être rejetée (art. 64 al. 1 LTF). Le recourant, qui succombe, supportera les frais judiciaires (art. 66 al. 1 LTF), dont le montant sera fixé en tenant compte de sa situation financière, laquelle n'apparaît pas favorable.
Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
La demande d'assistance judiciaire est rejetée.
3.
Les frais judiciaires, arrêtés à 1'200 fr., sont mis à la charge du recourant.
4.
Le présent arrêt est communiqué aux parties et à la Cour d'appel pénale du Tribunal cantonal du canton de Vaud.
Lausanne, le 23 janvier 2019
Au nom de la Cour de droit pénal
du Tribunal fédéral suisse
Le Président : Denys
La Greffière : Klinke